计算机系统之可重定位目标文件

mac2022-06-30  28

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

最新回复(0)