Измените .exe с помощью hexeditor

Я написал небольшую программу на 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, но ничего не нашел. Итак, где же секция кода (образ)?

3

Решение

C ++ — это язык высокого уровня. Это написано в «источнике» (обычный текст, т.е. if ( ... )), и компилятор переводит это в машинный код.

Машинный код очень разные, язык низкого уровня. Во-первых, то, что C ++ делает с «if … else», машинный код делает с «инструкцией условного перехода», которая представляет собой (последовательность) определенных байтовых значений, то есть того, что вы видите в шестнадцатеричном редакторе. «Если» больше не существует.

Конкретный набор команд и значения байтов, представляющие эти команды, отличаются от семейства ЦП к семейству ЦП.

Если ты действительно интересует машинный код, проверьте Искусство программирования на ассемблере Рэнди Хайд. Оно имеет очень хорошее введение в сборку x86 и машинный код.

В целом, тем не менее, вам не понадобятся дополнительные знания ASM / машинного кода, поскольку тема всплывает довольно редко, даже на профессиональном уровне, если вы не работаете с операционными системами и / или драйверами устройств (и большей частью время даже не тогда).

6

Другие решения

Вы не найдете if оператор в вашем исполняемом файле, потому что он будет переведен на машинный язык, что является главной целью процесса компиляции -> преобразовать ваш код C ++ во что-то, что машина знает, как выполнить.

Если вы хотите «взломать» ваш .exe, вам нужен дизассемблер и знания для его использования, и это длинная история, поэтому ваш вопрос, вероятно, слишком широк для Stackoverflow.

7

В языке c или c ++ оператор if такой же, так что вы ничего не можете получить специальное заявление if для с ++.

А также, когда вы строите свою программу, она конвертируется в язык машинного уровня, поэтому вы не можете найти ничего позади программы. это прямо показывает выход

-7
По вопросам рекламы [email protected]