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

1.程序编译过程

在平时,源文件到目标文件是如下图转换,我们今天来着重分析hello.o,也就是标题的重定位目标文件。
在这里插入图片描述

2.目标文件的分类

目标文件有三种形式。

  1. 可重定位目标文件,包含二进制代码和数据,在编译时可以与其他可重定位文件合并,创建一个可执行目标文件
  2. 可执行目标文件, 包含二进制代码和数据,其可被直接复制到内存并执行。
  3. 共享目标文件,一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态的加载进内存并链接。

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版权协议,转载请附上原文出处链接和本声明。