Изменить.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++-это язык высокого уровня. Он записан в "исходном коде" (обычный текст, то есть
Машинный код-это оченьдругой , низкоуровневый язык. Например, что C++ делает с "if ... иначе", машинный код делает с "условной командой ветви", которая представляет собой (последовательность) определенных байтовых значений, то есть то, что вы видите в шестнадцатеричном редакторе. "Если" больше не существует.if ( ... )
), и компилятор переводит его в машинный код.Конкретный набор команд и байтовые значения, представляющие эти команды отличаются от семейства процессоров к семейству процессоров.
Если вы действительно заинтересованы в машинном коде, ознакомьтесь с искусством программирования на ассемблере Рэнди Хайда. Он имеет очень хорошее введение в сборку x86 и машинный код.
Вообще говоря, вам не понадобится больше, чем знание токенов ASM / машинного кода, так как этот предмет всплывает довольно редко даже на профессиональном уровне, если вы не работаете с операционными системами и или драйверы устройств (и в большинстве случаев даже тогда).
Вы не найдете оператора
if
в исполняемом файле, потому что он будет переведен на машинный язык, что является основной целью процесса компиляции -> перевести ваш код C++ на что-то, что машина знает, как выполнить.Если вы хотите "взломать" свой .exe, что вам нужно, так это дизассемблер и знания, чтобы использовать его, и это долгая история, поэтому ваш вопрос, вероятно, слишком широк для Stackoverflow.
В языке c или c++ оператор if является тем же самым, так что нет ничего, что вы можете получить вам a специальное заявление if для c++.
А также, Когда вы построили свою программу, она преобразуется в язык машинного уровня, поэтому u не может найти ничего позади программы. он непосредственно показывает U выход