ELF Format 筆記(九)—— Elf32_Sym 結構的 st_value 和 st_shndx 成員


ilocker:關注 Android 安全(新手) QQ: 2597294287

前面的筆記中提到過 Elf32_Sym 結構,本篇筆記再寫一下其中的 st_value 和 st_shndx 成員。

對於不同類型的 object file,st_value 的含義略有不同:

 · 對於 relocatable (.o) 文件,如果相應的 st_shndx 的值為 SHN_COMMON,則 st_value 保存的是對齊字節數。

 · 對於 relocatable (.o) 文件,如果該符號已定義,則 st_value 保存的是該符號在其所定義的 section (由 st_shndx 指定) 中的偏移量。

 · 對於可執行和 shared object (.so) 文件,st_value 保存的是一個虛擬地址。android linker 通過將 st_value 與該文件加載到內存的基址相加,從而得到該符號的定義地址。

 

st_shndx 是定義該符號的 section 在 section header table 中的索引 (section number)。這里列出幾個特殊值:

 · SHN_UNDEF:通常表示該符號在本文件中未定義 (外部符號),android linker 會為該符號做地址重定位。

 · SHN_ABS:表示該符號包含一個絕對的 (absolute) 值 (往往是一個地址),不受重定位影響。例如:

  

   又如,表示文件名的符號:

  

 · SHN_COMMON:表示該符號是一個 common 符號,通常未初始化的全局變量就是該類型的符號。關於 common 符號可以去了解一下鏈接器的“common block”機制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM