4

我用 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,但没有找到任何东西。那么,代码部分(图像)在哪里?

4

3 回答 3

7

您不会if在可执行文件中找到语句,因为它已被翻译成机器语言,这是编译过程的全部目的 -> 将您的 C++ 代码翻译成机器知道如何执行的东西。

如果你想“破解”你的 .exe,你需要的是一个反汇编程序和使用它的知识,这是一个很长的故事,这就是为什么你的问题对于 Stackoverflow 来说可能过于广泛。

于 2016-01-27T11:51:58.537 回答
7

C++ 是一种高级语言。它是用“源代码”(纯文本,即if ( ... ))编写的,编译器将其转换为机器代码。

机器代码是一种非常不同的低级语言。一方面,C++ 对“if ... else”的作用,机器代码对“条件分支指令”的作用,它是特定字节值的(序列),即您在十六进制编辑器中看到的内容。“如果”不再存在。

具体的命令集和代表这些命令的字节值因 CPU 系列而异。

如果您真的对机器代码感兴趣,请查看Randy Hyde的 The Art of Assembly Language Programming。它对 x86 汇编和机器代码有很好的介绍。

不过,一般来说,您只需要 ASM / 机器代码的象征性知识,因为即使在专业级别上也很少会弹出该主题,除非您正在研究操作系统和/或设备驱动程序(以及大多数时间甚至没有)。

于 2016-01-27T12:05:10.927 回答
-7

在 c 或 c++ 语言中,if 语句是相同的,因此您无法为 c++ 提供特殊的 if 语句

而且,当您构建程序时,它会被转换为机器级语言,因此您在程序后面找不到任何东西。它直接显示你的输出

于 2016-01-27T11:55:51.357 回答