CSAPP笔记(第七章)

目标文件

一.前言

我们直接编辑的C语言程序无法在机器上运行,必须进经过一定的处理,下图为我们揭示了C文件如何变成具体的机器可执行的代码文件。
编译
编译驱动程序包括

预处理器(cpp)

将程序从ASCII源文件翻译成 .i 文件

编译器(ccl)

翻译成 .s ASCII汇编语言文件

汇编器(as)

翻译成 .o 可重定位目标文件

链接器(ld)

翻译成可执行文件

链接必须完成两个主要任务:
1.符号解析
目标文件定义和引用符号。符号解析的目的是将每个符号引用刚好和一个符号定义联系起来。(这里的符号包括变量名和函数名)
2.重定位
链接器通过把每个符号定义和一个存储器位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储器位置,从而重定位这些节。

二.目标文件概述

目标文件是按照特定的目标文件格式来组织的,各个系统的目标文件格式都不同。现代x86-64 Linux和Unix系统使用可执行可链接格式——ELF,且有以下三种形式:
1.可重定位目标文件(.o)
包含二进制代码和数据,其可以在编译时与其他可重定位目标文件合并起来,组成一个可执行二进制文件。
2. 可执行目标文件(./a.out)
包含二进制代码和数据,可以被直接拷贝到存储器中执行。
3.共享目标文件(.so)
特殊类型的可重定位目标文件,可以在加载或运行时被动态地加载到存储器,并链接。

三.文件结构

以下是一个典型的ELF文件格式:
在这里插入图片描述
其中:

  1. ELF头,以一个16字节的序列开始,描述生成该文件的系统的字的大小和字节顺序。剩下字节包
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值