学习 2018 年 4 月 15 日

main函数入口识别

记录结构体对齐对内存优化的笔记

一、入口函数的几个特征

  • main函数调用前会先调用如下几个函数:
GetVersion()
_heap_init()
GetCommandLineA()
_crtGetEnvironmentStringsA()
_setargv()
_setenvp()
_cinit()
  • MSDN中针对Windows程序中main函数明确表示会有3个参数int main( int argc, char *argv[ ], char *envp[ ] ),因此main调用前会有3个参数压入栈中的一个操作。(虽然int main(int argc, char *argv[])int main(void)都是被接受的,但不管我们代码中实际使用了几个参数,在程序被编译时其main函数肯定是3个参数的,因为这取决于Windows系统的机制。)
  • 我们通过MSDN可知应用程序会随着main函数结束而退出,这又给了我们第二个有力的特征,既main函数肯定是在程序退出代码附近的(而且目前的主流调试、反汇编工具都可以正确识别出退出函数exit)

二、代码分析

相关参考:https://bbs.pediy.com/thread-113691.htm