读书人

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

发布时间: 2012-11-05 09:35:12 作者: rapoo

从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 类似的函数,这里一起顺便看下~

?

?

?

?

?

?

?

读书人网 >网络基础

热点推荐