执行main()函数之前的Windows VC ++ 2010代码

时间:2010-10-06 21:18:56

标签: visual-studio visual-c++ reverse-engineering portable-executable

我使用C ++编译器(Win32是目标)在Visual Studio 2010中编译简单的Hello World应用程序,以便在使用Immunity调试器运行它时在显微镜下查看产品的外观。然而,我注意到有一些代码(实际上是相当多的代码)在我的main函数到达之前运行。很多这样的东西看起来与安全相关,或者可能准备系统来管理进程或者没有,但是那里只有一个TON。更重要的是,PE文件头的EntryPoint部分似乎指向我的.text段的内部,而看起来我的main()函数在.text段的最开始处休息。我的问题是:是否有一些关于这个序言的好文档被打到我的代码的前面和/或是通常由VC ++编译器放在.text段的最开头的main()函数?感谢您的任何见解!

2 个答案:

答案 0 :(得分:1)

不确定2010年,但旧的VC6过去常常附带其CRT的源代码,包括包含此初始化代码的文件(称为crtexe.c)。

命令行应用程序中的默认入口点称为mainCRTStartup。

答案 1 :(得分:1)

编译器会将您的用户代码放在.text段的开头,因为这是您希望找到 代码的位置。所有其他非用户代码最终放在您的程序之后,这是程序按预期工作所必需的,但您不必担心。在编写C程序时,您希望某些事情可用,例如本地数组中的命令行参数initializing global variables,确保标准I / O可用以及需要C运行时所需的其他重要事项待初始化。

如果查看例程的源代码,注释将解释为什么需要它。

  

这些例程执行C运行时初始化,调用相应的   用户输入功能,并处理终止清理。对于托管   然后,他们将退出代码返回给调用例程   是托管的启动代码。对于非托管应用程序,他们调用exit和   永远不会回来。