首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

从Entry Point到main函数调用(六):exit

2012-11-05 
从Entry Point到main函数调用(6):exit本章是该系列最后一篇,打算看一下 exit 函数中究竟做了些什么。?main

从Entry Point到main函数调用(6):exit

本章是该系列最后一篇,打算看一下 exit 函数中究竟做了些什么。

?

main函数的返回值

在第(5)篇里完成了_cinit() 的分析之后,mainCRTStartup中接下来代码是:

?

注意倒数第二行,这里将EAX清0。其实 main 函数也是一个标准的__cdecl 函数,其return的值会存放在EAX中,因此这里等于会返回一个0 。可见VS2010 这点上还是满足C99 标准的,即使程序员写的是 void main,它依然悄悄的在最后添上 return 0。

?

来看看VC 6,如果用VC 6来build同样一段代码,则main函数为:

从Entry Point到main函数调用(六):exit

很显然,这里并没有将EAX的值清0再retn,但是接下来依然会从EAX 中拿值赋给mainret 。换句话说,用VC6 编译的时候,main函数并不会有默认的返回值,真正传进exit函数的还是main调用完后的EAX值,不过鬼知道这个时候EAX 是什么。这里可以看出 VC6并没有遵循C99的规范,貌似VC6是98年出来的,想想也算情有可原了...

?

?

exit?? _exit?? _cexit?? _c_exit

由于有一系列和 exit 类似的函数,这里一起顺便看下~

?

?

?

?

?

?

?

热点排行