用 hexeditor 修改 .exe
Change .exe with 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
,但没有找到任何内容。那么,代码部分(图片)在哪里?
您不会在可执行文件中找到 if
语句,因为它已被翻译成机器语言,这是编译过程的全部目的 -> 将您的 C++ 代码翻译成机器可以理解的东西知道如何执行。
如果你想 'hack' 你的 .exe,你需要的是反汇编程序和使用它的知识,这是一个很长的故事,这就是为什么你的问题对于 Whosebug 来说可能太宽泛了。
在 C 或 C++ 语言中,if 语句是相同的,所以没有什么可以让你得到一个 特殊的 if 语句 c++.
而且,当您构建程序时,它会被转换为机器级语言,因此您无法找到程序背后的任何内容。它直接显示你的输出
C++ 是一种 high-level 语言。它以 "source"(纯文本,即 if ( ... )
)编写,编译器将其翻译成机器代码。
机器码是一种非常不同、low-level的语言。首先,C++ 用 "if ... else" 做什么,机器代码用 "conditional branch instruction" 做什么,这是一个(序列)特定字节值,即你在十六进制编辑器中看到的。 "if" 已不存在。
特定的命令集和表示这些命令的字节值在 CPU 系列和 CPU 系列之间有所不同。
如果您真的对机器代码感兴趣,请查看 Randy Hyde 的 The Art of Assembly Language Programming。它非常很好地介绍了 x86 汇编和机器代码。
不过,一般来说,您只需要了解 ASM / 机器代码的象征性知识,因为即使在专业水平上,该主题也很少出现,除非您从事操作系统和/或设备驱动程序方面的工作(大多数时候甚至都不是)。
我用 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
,但没有找到任何内容。那么,代码部分(图片)在哪里?
您不会在可执行文件中找到 if
语句,因为它已被翻译成机器语言,这是编译过程的全部目的 -> 将您的 C++ 代码翻译成机器可以理解的东西知道如何执行。
如果你想 'hack' 你的 .exe,你需要的是反汇编程序和使用它的知识,这是一个很长的故事,这就是为什么你的问题对于 Whosebug 来说可能太宽泛了。
在 C 或 C++ 语言中,if 语句是相同的,所以没有什么可以让你得到一个 特殊的 if 语句 c++.
而且,当您构建程序时,它会被转换为机器级语言,因此您无法找到程序背后的任何内容。它直接显示你的输出
C++ 是一种 high-level 语言。它以 "source"(纯文本,即 if ( ... )
)编写,编译器将其翻译成机器代码。
机器码是一种非常不同、low-level的语言。首先,C++ 用 "if ... else" 做什么,机器代码用 "conditional branch instruction" 做什么,这是一个(序列)特定字节值,即你在十六进制编辑器中看到的。 "if" 已不存在。
特定的命令集和表示这些命令的字节值在 CPU 系列和 CPU 系列之间有所不同。
如果您真的对机器代码感兴趣,请查看 Randy Hyde 的 The Art of Assembly Language Programming。它非常很好地介绍了 x86 汇编和机器代码。
不过,一般来说,您只需要了解 ASM / 机器代码的象征性知识,因为即使在专业水平上,该主题也很少出现,除非您从事操作系统和/或设备驱动程序方面的工作(大多数时候甚至都不是)。