逆向工程之ELF檔案格式分析

2021-09-18 08:26:42 字數 2837 閱讀 6208

1.elf全稱executable and linkable format,可執行連線格式,elf格式的檔案用於儲存linux程式。elf檔案(目標檔案)格式主要三種:

一般的 elf 檔案包括三個索引表:elf header,program header table,section header table。

第二行

第三行

第四行

file elf顯示生成的目標檔案hello的型別

elf是乙個可執行檔案。輸入:ls –l hello檢視hello的大小:

如圖可知,hello大小為7336位元組。

輸入:hexdump –x hello來用16進製制的數字來顯示hello的內容

(其中,第二列是16進製表示的偏移位址)

輸入:objdump –x hello來顯示hello中各個段以及符號表的相關資訊:

輸入:readelf –a hello來檢視各個段資訊:

elf檔案頭資訊:

段表section header table:

符號表 symbol table:

在乙個elf檔案中有乙個section header table,通過它我們可以定位到所有的 section,而 elf header 中的e_shoff 變數就是儲存 section header table 入口對檔案頭的偏移量。而每個 section 都會對應乙個 section header ,所以只要在 section header table 中找到每個 section header,就可以通過 section header 找到你想要的 section。

下面以可執行檔案hello為例,以儲存**段的 section 為例來講解讀取某個section 的過程。

使用『vi /usr/include/elf.h 』命令檢視sections header的結構體:

由上面分析可知,section headers table中的每乙個section header所佔的size均為64位元組,elf header得到了e_shoff變數的值為0x0034,也就是table入口的偏移量,通過看e_shnum值為0x001e,表示段表入口有30個。

所以從0x00000034開始有30個段,每個段佔40個位元組大小,輸入 hexdump hello檢視:

我們用readelf 命令去檢視.text這個 section 中的內容,

輸入readelf –x 13 hello,(.text前面的標號為13)對13索引號的.text的section的內容進行檢視:

下面用 hexdump 的方法去讀取.text這個 section 中的內容,通過看section header中.text中offset和size分別是0x320和0x192

輸入 hexdump –c hello

找到320後的192個

得到了和上面的readelf得到的相同。

使用下面命令對hello的文字段(.text)進行反彙編:

objdump –d hello 得到如下圖:

可以看出,使用反彙編的16進製制資料和前面查詢到的是相同的。

text section是可執行指令的集合,.data和.text都是屬於progbits型別的section,這是將來要執行的程式與**。查詢段表可知.text section的位偏移為0x0000320,size為0x0000192。

strtab section是屬於strtab型別的section,可以在檔案中看到,它存著字串,儲存著符號的名字。位偏移為0x000106f,size為0x0000106

symtab section存放所有section中定義的符號名字,比如「data_items」,「start_loop」。 .symtab section是屬於symtab型別的section,它描述了.strtab中的符號在「記憶體」中對應的「記憶體位址」。 位偏移為0x0001628,size為0x0000430。

rodata section,ro代表read only。位偏移為0x000050c,size為0x00000b0。

文章**:

ELF檔案格式分析

elf檔案 目標檔案 格式主要三種 1 可重定向檔案 檔案儲存著 和適當的資料,用來和其他的目標檔案一起來建立乙個可執行檔案或者是乙個共享目標檔案。目標檔案或者靜態庫檔案,即linux通常字尾為.a和.o的檔案 2 可執行檔案 檔案儲存著乙個用來執行的程式。例如bash,gcc等 3 共享目標檔案 ...

ELF檔案格式

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

ELF檔案格式

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