有人能解释一下为什么一个简单的 C++ 应用程序 -
#include <iostream>
int main()
{
std::cout << "Hello world!";
return 0;
}
用 MSVC 2012 编译在 IDA/Olly 中看起来很奇怪?为什么我看到数百行 ASM 代码,而不是我预期的那几行?有人可以向我解释所有这些代码的来源吗?谢谢。
有人能解释一下为什么一个简单的 C++ 应用程序 -
#include <iostream>
int main()
{
std::cout << "Hello world!";
return 0;
}
用 MSVC 2012 编译在 IDA/Olly 中看起来很奇怪?为什么我看到数百行 ASM 代码,而不是我预期的那几行?有人可以向我解释所有这些代码的来源吗?谢谢。
您使用的一段代码是#include,其中包括:http : //www.opensource.apple.com/source/gcc/gcc-937.2/libio/iostream.h
你可能会发现班级。这会生成大量代码,您还需要考虑库、默认编译器生成的代码等。
如果您使用 NASM 组装一个基本应用程序,您还会发现比您编写的更多的程序集。
有几个原因:
我希望你明白,要添加以上所有内容,编译器需要添加一些代码,而这甚至是之前的代码your code。当然,您可以通过使用参数来禁用上述所有功能。
减少可执行文件大小是一个很好的有用信息列表,可以帮助您了解幕后发生的事情。
我的建议是编写以下代码
int main()
{
return 0;
}
删除所有优化并通过一次添加/删除编译器选项从那里开始您的研究。
玩得开心!