ELF文件简介
基本定義
ELF(Executable and Linkable Format)是一種用于二進制文件,可執行文件、目標代碼、共享庫和核心轉儲格式文件。
簡單理解:一種二進制文件格式
目的:提供一組二進制接口,這些接口可以延伸到多種操作系統中,從而減少重新編碼、編譯程序的需要。
ELF文件分類
1. 可重定位目標文件(Relocatable file)
由匯編器產生的.o文件。包含二進制代碼和數據,用來被鏈接成可執行文件或者共享目標文件。
例如:.o文件
如程序執行圖中的hello.o部分
相應命令:gcc -c hello.c hello.o
2. 可執行目標文件(Executable file)
包含二進制代碼和數據,可以直接執行,代表了ELF可執行文件,他們一般沒有拓展名。
例如:/bin/bash文件
3. 共享目標文件(Shared Object file)
即所謂的動態庫文件或共享庫(動態庫文件說明后附),使用情況有兩種,分別對應了程序運行過程中的鏈接階段及可執行文件執行階段:
a. 鏈接器使用這種文件與可重定位文件和共享目標文件鏈接,產生新的目標文件。
b. 動態鏈接器將幾個共享目標文件與可執行文件結合,作為進程映像的一部分運行。
例如:.so文件
動態庫文件說明:
如果使用靜態庫生成可執行程序,那么每個生成的可執行程序都會有一份庫代碼的拷貝。如果在磁盤中存儲這些程序,就會額外占用額外的磁盤空間。而且使用靜態庫匯編的可執行程序在Linux系統上運行時,也會浪費物理內存。
但是如果將靜態庫變為動態庫就不會出現這類的問題。動態庫運行過程中會存在兩種情況,如下:
1.鏈接編輯器(link editor)運行動態庫與.o(重定向目標文件)或者.so(共享目標文件)文件時,經鏈接處理后,生成另外的共享目標文件或者可執行目標文件。
2.在運行時,動態鏈接器(dynamic linker)運行動態庫和一個可執行文件以及另外一些共享目標文件時,會在linux系統中創建一個進程映像。
總結
- 上一篇: 永劫无间b阔是什么意思 《永劫无间》官方
- 下一篇: 哈利波特禁林竖琴有什么用