什么是运行库

main函数真的是程序的起始么?如果不是,那么是谁在幕后呢?运行库(CRT)。

运行库职责的主要流程:

1.初始化和操作系统版本有关的全局变量

2.初始化堆

3.初始化I/O

4.获取命令行参数和环境变量

5.初始化C库的一些数据

6.调用mian并记录返回值

7.检查错误并将main的返回值返回

OS装载好程序后,首先运行的是别的代码,它们负责准备好main所需的环境,并调用main函数,在main返回后,会记录main函数的返回值,然后调用atexit注册的函数,最后结束进程。

运行这些代码的函数称为入口函数。实际上就是一个程序的初始化和结束部分,它就是CRT的一部分。

glibc真正的程序入口为_start:

                                                                     

                                                              主要分为两部分,即线分隔开的两部分

                                                       

                                                    ebp清零来表示层级,esi存放argc,ecx指向argv(环境变量就在命令行参数后面)。第二部分就是压参数然后调函数。

                                                          

                                                

                                                         

                                                          调用__libc_start_main函数内容如下:

                                                            


总结:运行库主要是开头和扫尾工作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值