elf檔案格式學習

2021-05-25 07:24:11 字數 2605 閱讀 6117

elf

檔案格式學習

文章出處:

結合例項解讀

elf檔案

-閱讀筆記

bkbll([email protected], [email protected])

自unix

系統實驗室

(usl)

開發和發布了

executable and linking format(elf)

這樣的二進位制格式以後,在

*nix

系統上elf

就取代了

out可執行檔案格式,成為了主要的目標檔案格式。

注:這裡的目標檔案是指(可暫時理解為)gcc–c-o-shared所產生的.o,可執行(預設是a.out).so檔案。

elf檔案)格式主要三種:

relocatable file

):檔案儲存著**和適當的資料,用來和其他的目標檔案一起來建立乙個可執行檔案或者是乙個共享目標檔案。由編譯器和彙編器生成,將由鏈結器處理。

executable file

):檔案儲存著乙個用來執行的程式;該檔案指出了

exec(ba_os)

如何來建立程式程序映象。所有重定向和符號都解析完成了,如果存在共享庫的鏈結,那麼將在執行時解析。

shared object file

[請參看

ld(sd_cmd)]

,可以和其他的可重定向和共享目標檔案來建立其他的目標檔案。第二個是動態鏈結器,聯合乙個可執行檔案和其他的共享目標檔案來建立乙個程序映象。包含鏈結時所需的符號資訊和執行時所需的**。

elf檔案。

hello.c

#

include

int main(

)

gcc編譯

hello.c

檔案$ uname -a

linux ubuntu804 2.6.24-26-generic #1 smp tue dec 1 18:37:31 utc 2009 i686 gnu/linux

$ gcc -

-version

gcc (gcc) 4.2.4 (ubuntu 4.2.4-1ubuntu4)

inc.

this is free software; see the source for copying conditions. there is no

warranty;

not even for merchantability or fitness for a particular purpose.

)編譯重定向檔案:

$ gcc -c hello.c

$file hello.o

hello.o: elf 32-bit lsb relocatable, intel 80386, version 1 (sysv)

,not stripped

)編譯可執行檔案:

$ gcc -o hello hello.o

$ file hello

hello: elf 32-bit lsb executable, intel 80386, version 1 (sysv)

,for gnu/linux 2.6.8, dynamically linked (

uses shared libs)

,not stripped

ldd命令檢視

hello

這個可執行檔案動態鏈結的共享庫。

$ ldd hello

libc.so.6 =

> /lib/tls/i686/cmov/libc.so.6 (0xb7d99000)

/lib/ld-linux.so.2 (0xb7ef8000)

)編譯共享目標檔案:

$ gcc -shared hello.c -o hello.so

$ file hello.so

hello.so: elf 32-bit lsb shared object, intel 80386, version 1 (sysv)

,not stripped

後續部分:

ELF檔案格式

在介紹elf格式之前,先簡單說明一下可執行檔案的生成流程 1 編寫c原始檔,或彙編原始檔 2 準備共享庫格式的目標檔案 shared object file 如數學庫 標準庫 2 用編譯器 compiler 將c編譯成可重定位格式的目標檔案 relocatable object file 用彙編器 ...

ELF檔案格式

1.目標檔案 編譯器和彙編器生成可重定位目標檔案 包括共享目標檔案 鏈結器生成可執行目標檔案。2.可重定位目標檔案和可執行目標檔案的格式 可重定位目標檔案格式 可執行目標檔案格式 3.下面我們開始分析上面 而對於未被初始化的全域性變數和靜態區域性變數,編譯的時候並未被分配空間,而是僅僅在.bss段中...

ELF檔案格式

elf指executable and linking format,不僅包含可執行檔案,也包含庫檔案,包括靜態庫和動態庫。準備的說,也就是三種 這不廢話嗎 可執行檔案 靜態鏈結庫 動態鏈結庫 要觀察elf的具體資訊,可以用以下幾個工具 nm lists symbols from object fil...