計算機系統之可重定位目標文件

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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章