1. 程式人生 > >目標檔案裡有什麼

目標檔案裡有什麼

目標檔案裡有什麼

目標檔案的格式

現在PC平臺比較流行的是:

  • Windows下的PE(Portable Excutable)
  • Linux的ELF(Excutable Linkable Format)

它們都是COFF(Comon File Fotmat)檔案的變種

ELF格式檔案分類

ELF檔案型別 說明 例項
可重定位檔案(Relocatable File) 這些檔案包含了資料和程式碼,可以被用來被連結成可執行檔案和目標共享檔案,靜態連結庫也可以歸為這一類 Linux的.so,Windows的.obj
可執行檔案(Executable File) 這類檔案代表了可執行檔案,這類檔案一般沒有副檔名 Windows的exe,/bin/bash
共享連結檔案(Shared Object File) 這種檔案包含了程式碼和資料,可以與其他可重定位檔案和共享目標檔案連結,產生新的可執行檔案,也可以與其他共享目標檔案和可執行檔案結合,作為程序映像的一部分來執行 Linux的.so,Windows的dll
核心轉儲檔案(Core Dump File) 當程序意外終止時,系統可以將該程序的地址空間的內容及終止時的一些其他資訊轉出到核心轉出檔案 Linux下的Core Dump

Linux下可以使用file命令來檢視檔案格式:

file foo.ba

file /bin/bash

file /lib/ld-2.6.so

Exceutable File/Object File

File Header 檔案頭,描述整個檔案的屬性,各個段表的屬性
.text section 程式碼段
.data section 資料段
.bss section 資料段,存放未初始化的全域性變數和區域性靜態變數

分段的好處:

  • 對不同的段可以使用不同的許可權,如程式碼段使用只讀許可權
  • 提高程式碼命中率
  • 節省相同段的存放空間