1.程序编译过程
在平时,源文件到目标文件是如下图转换,我们今天来着重分析hello.o,也就是标题的重定位目标文件。
2.目标文件的分类
目标文件有三种形式。
- 可重定位目标文件,包含二进制代码和数据,在编译时可以与其他可重定位文件合并,创建一个可执行目标文件。
- 可执行目标文件, 包含二进制代码和数据,其可被直接复制到内存并执行。
- 共享目标文件,一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态的加载进内存并链接。
3.可重定位文件的生成
我在Ubuntu里面先编写一个hello world 的C程序。
#include<stdio.h>
int main(){
printf("hello world");
return 0;
}
然后使用Linux的gcc命令使生成可重定位文件
gcc -c hello.c
如图
我们可以在文件中发现多了一个 hello.o的文件
这个就是前面提到的可重定位目标文件。
4.解析可重定位目标文件
1.ELF:可执行可链接格式(Executable and Linkable Format, ELF)。
其中夹在ELF头和字头部表之间的都是节。
一个典型的ELF可重定位目标文件就包含上图中几个节。
我们可以用如下几个指令进行查看并运用。
2.使用readelf -S查看hello.o
3.使用readelf -h查看hello.o
4.使用readelf -s查看hello.o
版权声明:本文为qq_44807642原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。