vc++6.0 启动代码

来源:互联网 发布:photoshop cc 2017 mac 编辑:程序博客网 时间:2024/05/29 13:56
vc++6.0 启动代码


--- crt0.c  ---------------------------------------------------------------------------------------------------------------------------------
mainCRTStartup:
00408290   push        ebp
00408291   mov         ebp,esp
00408293   push        0FFh
00408295   push        offset string "onexit.c"+10h (004313a0)
0040829A   push        offset __except_handler3 (0040e260)
0040829F   mov         eax,fs:[00000000]
004082A5   push        eax
004082A6   mov         dword ptr fs:[0],esp
004082AD   add         esp,0F0h
004082B0   push        ebx
004082B1   push        esi
004082B2   push        edi
004082B3   mov         dword ptr [ebp-18h],esp
004082B6   call        dword ptr [__imp__GetVersion@0 (0043b164)]   调用GetVersion()函数,获取版本信息,返回值放在eax中
004082BC   mov         [__osver (00438914)],eax                版本信息保存在_osver变量中
004082C1   mov         eax,[__osver (00438914)]
004082C6   shr         eax,8
004082C9   and         eax,0FFh
004082CE   mov         [__winminor (00438920)],eax
004082D3   mov         ecx,dword ptr [__osver (00438914)]
004082D9   and         ecx,0FFh
004082DF   mov         dword ptr [__winmajor (0043891c)],ecx
004082E5   mov         edx,dword ptr [__winmajor (0043891c)]
004082EB   shl         edx,8
004082EE   add         edx,dword ptr [__winminor (00438920)]
004082F4   mov         dword ptr [__winver (00438918)],edx
004082FA   mov         eax,[__osver (00438914)]
004082FF   shr         eax,10h
00408302   and         eax,0FFFFh
00408307   mov         [__osver (00438914)],eax

0040830C   push        0

0040830E   call        _heap_init (0040e0e0)                         调用_heap_init()函数 初始化堆空间 其中 参数0表示为单线程版本,1表示多线程

00408313   add         esp,4
00408316   test        eax,eax
00408318   jne         mainCRTStartup+94h (00408324)
0040831A   push        1Ch
0040831C   call        fast_error_exit (004083f0)
00408321   add         esp,4
00408324   mov         dword ptr [ebp-4],0
0040832B   call        _ioinit (0040dae0)
00408330   call        dword ptr [__imp__GetCommandLineA@0 (0043b160)]         调用GetCommandLineA()函数获取命令行信息
00408336   mov         [__acmdln (0043a2c4)],eax
0040833B   call        __crtGetEnvironmentStringsA (0040d8c0)     调用_crtGetEnvironmentStringsA()函数 获取环境变量信息
00408340   mov         [__aenvptr (004388e4)],eax
00408345   call        _setargv (0040d3b0)
0040834A   call        _setenvp (0040d260)
0040834F   call        _cinit (0040c6d0)                              调用_cinit()用于全局数据和浮点寄存器的初始化。全局对象和IO流对象都是通过这个函数实现的。
00408354   mov         ecx,dword ptr [__environ (00438930)]
0040835A   mov         dword ptr [___initenv (00438934)],ecx
00408360   mov         edx,dword ptr [__environ (00438930)]
00408366   push        edx
00408367   mov         eax,[___argv (00438928)]
0040836C   push        eax
0040836D   mov         ecx,dword ptr [___argc (00438924)]
00408373   push        ecx
00408374   call        @ILT+10(_main) (0040100f)      调用main()主函数,开始用户程序,传递参数_argc,_argv_environ
00408379   add         esp,0Ch
0040837C   mov         dword ptr [mainret],eax
0040837F   mov         edx,dword ptr [mainret]
00408382   push        edx
00408383   call        exit (0040c710)
$L17805:
00408388   mov         eax,dword ptr [ebp-14h]
0040838B   mov         ecx,dword ptr [eax]
0040838D   mov         edx,dword ptr [ecx]
0040838F   mov         dword ptr [ebp-20h],edx
00408392   mov         eax,dword ptr [ebp-14h]
00408395   push        eax
00408396   mov         ecx,dword ptr [ebp-20h]
00408399   push        ecx
0040839A   call        _XcptFilter (0040d050)
0040839F   add         esp,8



原创粉丝点击