学习
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)