反汇编简单的Hello World程序

问题描述 投票:0回答:3

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

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

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

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

c++ c visual-studio-2010 assembly
3个回答
3
投票

您将从一个巨大的代码库开始

<iostream>
。您可能想要做的是完全避免使用运行时库。尝试这样的事情:

#include <windows.h>

int main() {
    HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE);
    WriteFile(stdout, "Hello world\n", 12, NULL, NULL);
    return 0;
}

在打开程序集列表的情况下进行编译,这应该会为您提供一些“原始”Win32 代码。


2
投票

您可以在项目属性 -> 配置属性 -> 输出文件 -> 汇编器输出中生成汇编输出

这将让您看到您编写的代码的程序集。

拆解,你会得到一堆链接在一起的其他东西。


0
投票

要控制 Visual Studio 代码生成功能,请在 VS 中右键单击您的项目 -> 属性 -> 配置属性 -> c/c++ -> 代码生成。

不要忘记选择正确的构建配置(调试、发布等...)。

可以通过使用缓冲区安全检查来删除安全cookie(默认为/GS)

© www.soinside.com 2019 - 2024. All rights reserved.