链接过程分析(二)---ELF文件基础
来源:互联网 发布:淘宝哪家官换机是真的 编辑:程序博客网 时间:2024/05/22 08:04
以下文字大部分来源于《Linux C编程一站式学习》一书,只是增加了本人的一些解读和注释,原书对相关问题的描述更加系统化,建议参考。
2. ELF文件
ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型:
1. 可重定位的目标文件(Relocatable,或者Object File),<=== 如max.o
2. 可执行文件(Executable),<=== 如max
3. 共享库(Shared Object,或者 Shared Library),<=== 不是本节的内容,了解个名词即可
本节以前一节提供的max.s汇编程序为目标,分析 max.o 和 max 两个文件。
ELF格式提供了两种不同的视角,对应到我们分析的实例:
1. 链接器(ld命令)把输入文件max.o(ELF格式)看成是Section的集合;
2. 加载器(输入./max敲回车后由Linux自动调用完成)把输入文件max(ELF格式)看成是Segment的集合;
图2-1
上图2-1是原书提供的一个说明图。两点说明:
1)左边是从链接器的视角来看ELF文件(max.o),开头的ELF Header描述了体系结构和操作系统等基本信息,并指出Section Header Table和Program Header Table在文件中的什么位置,Program Header Table在链接过程中用不到,所以在max.o中是可有可无的,Section Header Table中保存了所有Section的描述信息,通过Section Header Table可以找到每个Section在文件中的位置。
2)右边是从加载器的视角来看ELF文件(max),开头是ELF Header,Program Header Table中保存了所有Segment的描述信息,Section Header Table在加载过程中用不到,所以在max中是可有可无的。
从上图可以看出,一个Segment由一个或多个Section组成,这些Section加载到内存时具有相同的访问权限。有些Section只对链接器有意义,在运行时用不到,也不需要加载到内存,那么就不属于任何Segment。注意Section Header Table和Program Header Table并不是一定要位于文件的开头和结尾,其位置由ELF Header指出,上图这么画只是为了清晰。
综合来看,如下图2-2所示:
图2-2
链接过程的横跨两种ELF格式文件的两头,其输入文件(max.o)是图2-1左边的视图--Section的集合,其输出文件(max)是图2-1右边的视图--Segment的集合。所以链接过程就是把一只ELF形式转化为另一种ELF形式的过程。后面将针对链接的输入和输出文件展开详细分析,以此了解链接过程所做的具体工作。
- 链接过程分析(二)---ELF文件基础
- 链接过程分析(三)---ELF文件之目标文件分析(max.o)
- 链接过程分析(四)---ELF文件之可执行文件分析(max)
- linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- 实例分析ELF文件静态链接
- ELF文件加载过程代码分析
- Intel平台下linux中 ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- Intel平台下linux中 ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- Intel平台下linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- Intel平台下linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- Intel平台下linux中 ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- ELF文件动态链接时 GOT,PLT 的变化过程
- ELF文件的加载和动态链接过程
- ELF文件动态链接时 GOT,PLT 的变化过程
- ELF文件的加载和动态链接过程
- ELF文件的加载和动态链接过程
- ELF文件动态链接时 GOT,PLT 的变化过程
- ELF文件动态链接时 GOT,PLT 的变化过程
- QCA8172有线网卡驱动在Ubuntu12.04下编译出错的解决方法
- Oracle高级查询之over(partition by..)
- 7.2.1 直接插入排序
- 循环-04. 验证“哥德巴赫猜想”(20)
- MongoDB初探#安装+简单操作
- 链接过程分析(二)---ELF文件基础
- 大型网站的架构演化
- 【小超_Android】2014年框架类源码年度精品汇总
- IOS开发百度地图API-用点生成路线,导航,气泡响应
- android开发小技巧(2)背景按钮等布局的好朋友shape应用
- 欢迎使用CSDN-markdown编辑器
- android数组资源string-array integer-array的用法
- jquery的节点操作html text append
- df