说说libc --有关 How main() is executed on Linux

http://hi.baidu.com/heidycat/blog/item/f8fe3ba1c1026b8e46106472.html

在linux下,程序的运行过程比我想象中要复杂得多了。即便一个程序没有包含任何头文件,但在编译之后,便会发现目标文件中包含了libc库。譬如,在MIPS的体系环境中,对C程序使用动态链接库进行编译后得到相应的目标文件,对该目标文件反汇编后,会发现section:.MIPS.stubs,这个section相当于IA32体系下的.plt,跟踪了一下,那段stub是跳到libc中的,也就是说,链接器把libc也加载进来了,尽管程序员并没有在程序中包含任何的头文件。

那libc究竟在其中扮演了怎样的角色呢?暂时了解到的是:libc是在进程执行_start部分之前便已进行了初始化的工作,其作用是管理进程的内存空间。这篇文章说得比较清楚:How main() is executed on Linux

P.S.在网上搜到这段文字,感觉颇有道理的:“内核之外,是一个用户态的系统程序库,为用户程序提供系统调用接口和一些最常用的routines,例如产生新的进程、分配和操作内存、存取文件等等。由于Linux是一个UNIX-like的操作系统内核,与之配合这个系统程序库通常是一个符合Single Unix Specifications标准的C语言库。依照惯例,这个库叫做libc。如果熟悉C语言程序开发,会认出这其实也是C程序的运行库,也就是说,所有用C语言开发的程序都必须和这个库链接。”(转自http://www.cchere.net/

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值