csapp “链接”

链接可以在编译时由静态编译器来完成,也可以在加载时和运行时由动态链接器来完成。连接器处理的文件为目标文件(为二进制文件)包含:可重定位的、可执行的、共享的三种。

 

多数编译系统提供编译驱动程序comiler driver,为用户根据需求调用语言预处理器、汇编器、和连接器。
驱动程序将ASCII码源文件翻译成为可执行目标文件的过程如下:

驱动程序首先运行C预处理器cpp将c源程序翻译成一个ASCII码的中间文件(扩展名为.i),然后驱动程序运行C编译器将
ASCII码的中间文件翻译成一个ASCII码汇编语言文件(.s),然后驱动程序运行汇编器(as),将汇编文件翻译成一个
可重定位目标文件(relocatable object file,扩展名为.o) 最后运行连接器程序ld,将可重定位目标文件以及一些必要的
系统目标文件组合起来,生成一个可执行的目标文件(executable object file),其中,为了创建可执行文件,链接器必须完成两个主要任务:1符号解析-将每个符号引用和一个符号定义联系起来2重定位-编译器和汇编器生成从地址0开始的代码和数据节。连接器把每个符号定义和一个存储器位置联系起来,并修改对这些符号的引用,实现重定位。

 

当运行该executable object file时,我们在shell中键入其名字,shell会调用os中叫做加载器loader的函数,它拷贝可执行文件中的代码码和数据到存储器,然后将控制转移到这个程序的开头。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值