我编写了这个小型 C++ 程序并构建了它(发布)
#include<iostream>
int main(){
std::cout<<"Hello World";
return 0;
}
当我拆开它时,它有很多额外的代码(安全cookie等..)。我相信 Visual Studio 正在添加所有这些。如何在没有任何额外信息的情况下编译该程序,以便轻松理解其反汇编代码?
我知道汇编相对更难,但我的意思是从 hello world c++ 程序中获取 hello world asm 代码。这可能吗?
您将从一个巨大的代码库开始
<iostream>
。您可能想要做的是完全避免使用运行时库。尝试这样的事情:
#include <windows.h>
int main() {
HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
WriteFile(stdout, "Hello world\n", 12, NULL, NULL);
return 0;
}
在打开程序集列表的情况下进行编译,这应该会为您提供一些“原始”Win32 代码。
您可以在项目属性 -> 配置属性 -> 输出文件 -> 汇编器输出中生成汇编输出
这将让您看到您编写的代码的程序集。
拆解,你会得到一堆链接在一起的其他东西。
要控制 Visual Studio 代码生成功能,请在 VS 中右键单击您的项目 -> 属性 -> 配置属性 -> c/c++ -> 代码生成。
不要忘记选择正确的构建配置(调试、发布等...)。
可以通过使用缓冲区安全检查来删除安全cookie(默认为/GS)