Я написал небольшую программу на C ++:
#include <iostream>
int main()
{
int input;
std::cin >> input;
if(input == 5){
std::cout << "Input == 5";
}
else{
std::cout << "Input != 5";
}
return 0;
}
Я уже построил программу. Рабочая программа находится в Release
папка. Теперь я хочу изменить if
утверждение, без изменения кода C ++. Я скачал шестнадцатеричный редактор и открыл файл. Внутри .exe
это много. Я погуглил проблему и нашел это очень хорошее изображение:
Я искал в шестнадцатеричном редакторе мой вывод Input == 5
, Я нашел это. Когда я изменяю его на что-то другое и запускаю файл, программа отображает новое введенное сообщение, а не старое.
Но теперь я хочу изменить структуру кода ( if
заявление). Я искал if
, но ничего не нашел. Итак, где же секция кода (образ)?
C ++ — это язык высокого уровня. Это написано в «источнике» (обычный текст, т.е. if ( ... )
), и компилятор переводит это в машинный код.
Машинный код очень разные, язык низкого уровня. Во-первых, то, что C ++ делает с «if … else», машинный код делает с «инструкцией условного перехода», которая представляет собой (последовательность) определенных байтовых значений, то есть того, что вы видите в шестнадцатеричном редакторе. «Если» больше не существует.
Конкретный набор команд и значения байтов, представляющие эти команды, отличаются от семейства ЦП к семейству ЦП.
Если ты действительно интересует машинный код, проверьте Искусство программирования на ассемблере Рэнди Хайд. Оно имеет очень хорошее введение в сборку x86 и машинный код.
В целом, тем не менее, вам не понадобятся дополнительные знания ASM / машинного кода, поскольку тема всплывает довольно редко, даже на профессиональном уровне, если вы не работаете с операционными системами и / или драйверами устройств (и большей частью время даже не тогда).
Вы не найдете if
оператор в вашем исполняемом файле, потому что он будет переведен на машинный язык, что является главной целью процесса компиляции -> преобразовать ваш код C ++ во что-то, что машина знает, как выполнить.
Если вы хотите «взломать» ваш .exe, вам нужен дизассемблер и знания для его использования, и это длинная история, поэтому ваш вопрос, вероятно, слишком широк для Stackoverflow.
В языке c или c ++ оператор if такой же, так что вы ничего не можете получить специальное заявление if для с ++.
А также, когда вы строите свою программу, она конвертируется в язык машинного уровня, поэтому вы не можете найти ничего позади программы. это прямо показывает выход