Изменить.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 3

3 ответа:

C++-это язык высокого уровня. Он записан в "исходном коде" (обычный текст, то есть if ( ... )), и компилятор переводит его в машинный код.

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

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

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

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

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

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

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

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