+以下內容摘抄自:elf檔案系列第三篇elf檔案靜態結構中的節
在 elf 檔案中有一些特定的節是預定義好的,其內容是指令**或者控制資訊,這些節專門為作業系統使用。在構建可執行程式時,聯結器(linker)可能需要把一些獨立的目標檔案和庫檔案連線在一起,在這個過程中,聯結器要解析各個檔案中的相互引用,調整某些目標檔案中的絕對引用,並重定位指令碼。每種作業系統都有自己的一套連線模型,但總的來說,不外乎靜態和動態兩類:
靜態鏈結:所有的目標檔案和庫被靜態地繫結在一起,所有的符號都被解析出來。所建立的目標檔案是完整的,執行時不依賴於任何外部的庫。
動態鏈結:所有的目標檔案、系統共享資源以及共享庫以動態的形式連在一起,外部庫的內容沒有完整地拷貝進來。如果建立的是可執行檔案的話,程式在執行的時候,構建時所依賴的那些庫必須在系統中能找到,把它們一併load之後,程式才能執行起來。執行期間如何解析那些動態鏈結進來的符號引用,不同系統有各自不同的方式。
動態鏈結過程所需要的資訊由.dynsym、.dynstr、.interp、.hash、.dynamic、.rel、.rela、.got、.plt 等節提供。.init 和.fini 節用於程序的初始化和終止過程。
特殊節彙總表:
以點號「.」為字首的節名字是為系統保留的。應用程式也可以構造自己的段,但最好不要取與上述系統已定義的節相同的名字,也不要取以點號開頭的名字,以避免潛在的衝突。注意,目標檔案中節的名字並不具有唯一性,可以存在多個相同名字的節。
快速定位ELF的PLT節和GOT節
在修復節表過程中,我們需要準確定位到plt和got這樣,可以快速讓反編譯器快速識別節 以下內容,都測試過android原生的libc linker以及自己編譯的ndk程式,沒有測試obj 在elf的非obj檔案中,plt位於.rel.plt的 檔案 屁股後面,緊挨著,定位.rel.plt的屁股用段表...
elf檔案格式(Linux中物件檔案)
elf executable and linking format 是一種物件檔案的格式,用於定義不同型別的物件檔案 object files 中都放了什麼東西 以及都以什麼樣的格式去放這些東西。它自最早在 system v 系統上出現後,被 xnix 世界所廣泛接受,作為預設的二進位制檔案格式來使...
幾種常見的ELF檔案
在linux下,我們經gcc編譯之後生成的可執行檔案屬於elf檔案 elf是一類檔案型別,而不是特指某一字尾的檔案。elf executable and linkable format,可執行與可鏈結格式 檔案格式,在linux下主要有如下三種檔案 elf格式可結構大致為 elf檔案由4部分組成,分...