MyN*_*ame 3 c++ hex hex-editors
我用C++编写了一个小程序:
#include <iostream>
int main()
{
int input;
std::cin >> input;
if(input == 5){
std::cout << "Input == 5";
}
else{
std::cout << "Input != 5";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经建立了这个程序.工作程序在Release文件夹中.现在我想更改if语句,而不更改C++代码.我下载了一个十六进制编辑器并打开了该文件 里面.exe很多.我搜索了问题,发现这个非常好的形象:
我在hex编辑器中搜索了我的输出Input == 5.我找到了.当我将其更改为不同的并执行文件时,程序将显示新输入的消息,而不是旧消息.
但现在我想改变代码的结构(if声明).我搜索过if,但没有找到任何东西.那么,代码部分(图像)在哪里?
您将无法if在可执行文件中找到语句,因为它将被翻译为机器语言,这是编译过程的全部目的 - >将C++代码转换为机器知道如何执行的内容.
如果你想"破解"你的.exe,你需要的是一个反汇编程序和使用它的知识,这是一个很长的故事,这就是为什么你的问题对于Stackoverflow来说可能过于宽泛.
C++是一种高级语言.它以"source"(纯文本,即if ( ... ))编写,编译器将其转换为机器代码.
机器代码是一种非常不同的低级语言.首先,C++使用"if ... else"做什么,机器代码使用"条件分支指令",这是一个(序列)特定字节值,即您在十六进制编辑器中看到的内容."如果"不再存在.
特定命令集和表示这些命令的字节值因CPU系列而异.
如果您对机器代码非常感兴趣,请查看Randy Hyde 的汇编语言编程艺术.它有一个非常好的介绍x86汇编和机器代码.
一般来说,您不需要ASM /机器代码的令牌知识,因为即使在专业级别上,主题也很少出现,除非您正在使用操作系统和/或设备驱动程序(并且大部分是时间甚至没有).