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