天天看點

linux二進制分析筆記-ELF程式頭ELF程式頭特殊的可加載核心子產品(LKM)

我的個人部落格:www.saoguang.top

  • ELF程式頭
    • PT_LOAD段
    • PT_DYNAMIC(動态段)
    • PT_NOTE段
    • PT_INTERP段
    • PT_PHDR段
  • 特殊的可加載核心子產品(LKM)

ELF程式頭

  1. 作用:ELF程式頭描述了磁盤上可執行檔案的記憶體布局以及如何映射到記憶體中。
  2. 位置:ELF頭重的e_phoff(程式頭表偏移)得到程式頭表。
  3. 檢視:檢視ELF檔案資訊

    $ readelf elf_file

PT_LOAD段

  1. 一個可執行檔案,至少有一個PT_LOAD段
  2. 一個需要動态連結的ELF可執行檔案,通常包含以下兩個可裝載的段
    1. 存放程式代碼的text段。
    2. 存放全局變量和動态連結資訊的data段。

PT_DYNAMIC(動态段)

  1. 内容包括
    • 運作時需要連結的共享庫清單
    • 全局偏移表(GOT)的位址
    • 重定位條目的相關資訊
    • 等等

PT_NOTE段

  1. 内容可能包括:供應商或者系統相關附加資訊
    • 一緻性的檢查
    • 相容性的檢查
  2. 一般來說,沒用,因為,并不是必需的。

PT_INTERP段

  1. 存放,以null為終止符的字元串,訓示動态連結器的位置,也即程式解釋器的位置。
  2. 執行個體:

    readelf參數說明:

    -p --string-dump=<number|name>

    Dump the contents of section

PT_PHDR段

PT_PHDR段,存儲了程式頭表本身的位置和大小,Phdr表儲存了,所有的段的描述資訊,如下圖。PHDR表

linux二進制分析筆記-ELF程式頭ELF程式頭特殊的可加載核心子產品(LKM)

特殊的可加載核心子產品(LKM)

類型為ET_REL的ELF檔案中不存在程式頭(也就是段),例如,.o類型的檔案會被連結器連結到可執行檔案中,但是并不會被載入記憶體。但是又有一個特例,可加載核心子產品(LKM),LKM是ET_REL類型的檔案,但是,它會被直接加載進核心中并自動進行重定位。

繼續閱讀