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”機制。