[英]Disassembling Simple Hello World program
我写了这个小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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.