編輯:關於android開發
ilocker:關注 Android 安全(新手) QQ: 2597294287
程序頭表 (program header table) 是一個結構體數組,數組中的每個結構體元素是一個程序頭 (program header),每個程序頭描述一個段 (segment)。
一個 so 通常有兩個可加載段 (LOAD) 段,android linker 在加載 so 時會根據 LOAD 段在內存中的最大虛擬地址減去最小虛擬地址,來計算要申請的內存大小。
除了兩個 LOAD 段,其他段中的數據也是執行程序所需的,如:動態鏈接需要 DYNAMIC 段,c++ 異常棧展開需要 EXIDX 段。所以其他段也是需要加載到內存的,它們實際就位於兩個 LOAD 段內部。
節 (section) 和段 (segment) 分別是從鏈接視圖和執行視圖兩個不同的角度的來劃分的,它們有一個對應關系 (每個段“包含”一個或者多個節):
程序頭結構:
typedef struct { Elf32_Word p_type; Elf32_Off p_offset; Elf32_Addr p_vaddr; Elf32_Addr p_paddr; Elf32_Word p_filesz; Elf32_Word p_memsz; Elf32_Word p_flags; Elf32_Word p_align; } Elf32_Phdr;
p_type:段類型,如:PT_LOAD (可加載段)、PT_DYNAMIC (動態段)。
p_offset:段數據的第一個字節相對於文件開頭的偏移量。
p_vaddr:段數據的第一個字節在內存中的虛擬地址 (只是一個偏移)。
p_paddr:暫時不用關心。
p_filesz:段數據在文件中的的字節大小,可以是 0。
p_memsz:段數據在內存映像中的字節大小,可以是 0。
p_flags:段內存映像的訪問權限:PF_X (可執行)、PF_W (可寫)、PF_R (可讀)。
p_align:如果為 0 或 1,表示不需要對齊。否則,p_align 應該是 2 的正整數冪,p_vaddr 和 p_offset 在對 p_align 取模後應相等。
Android源碼之陌陌源碼,android源碼本源碼是一個老版本的陌陌源碼,翻了翻代碼,發現有完整的登陸注冊功能(基於本地)其余都是靜態頁面。有需要的朋友可以拿去研究一
Android熱補丁動態修復技術(二):實戰!CLASS_ISPREVERIFIED問題! 一、前言 上一篇博客中,我們通過介紹dex分包原理引出了Android的熱補丁
在Android上使用JAVA實現彩圖轉換為灰度圖,跟J2ME上的實現類似,不過遇到頻繁地轉換或者
第二篇 Windows環境下Android Studio安裝和使用教程(圖文詳細步驟),androidstudio第二篇 Windows環境下Android