0
点赞
收藏
分享

微信扫一扫

main函数调用之前发生了什么?

boomwu 2022-04-13 阅读 79
c++

启动函数

系统内核KERNEL32.dll调用mainCRTStartup,其中再调用main函数。

通过调用堆栈观察

__scrt_common_main()

__security_init_cookie()
//初始化缓冲区溢出全局变量,检查缓冲区是否溢出

__scrt_common_main_seh()

_initterm_e(__xi_a,__xi_z)
//初始化c语法全局数据
//参数类型为  (_PIFV *):一个函数指针数组,保留了每个初始化函数的地址
//_PIFV原型定义如下:
//typedef int(__cdecl* _PIFV)(void)
//是一个函数指针
//__xi_a是起始地址,z是结束地址
//初始化失败返回0
_initterm(__xc_a,__xc_z)
//初始化c++全局数据,全局对象以及IO流等,数据链初始化
//C++对象在main函数开始前构造,其构造函数就是_PIFV调用的。

后面对线程初始化

invoke_main()

传递命令行参数信息

_argc
_argv
_env

如何寻找

启动函数中唯一有三个参数的

结束后调用exit函数

查找距离exit函数调用最近的有三个参数的函数

举报

相关推荐

0 条评论