拆解简单的Hello World程序

时间:2012-03-27 01:40:28

标签: c++ c visual-studio-2010 assembly compiler-construction

我编写了这个小型C ++程序并构建它(发布)

#include<iostream>
int main(){
     std::cout<<"Hello World";
     return 0;
}

当我反汇编它时,它有很多额外的代码(安全cookie等)。我相信Visual Studio正在添加所有这些。如何在没有任何额外信息的情况下编译此程序,以便易于理解其反汇编代码?

我知道汇编比较难,但我的意思是从hello world c ++程序中获取hello world asm代码。这可能吗?

3 个答案:

答案 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