ELF 和DEX 文件格式詳解

ELF 文件格式

linux Elf 文件格式,windows pe文件

ELF 文件由三部分組成: ELF文件頭(位置固定,大小也是固定的),段頭表,節(jié)頭表

ELF文件頭

16進制顯示
7F 起始 45 4C 46 ELF對應ASCII碼

ELF 文件整體結(jié)構(gòu):

ELF Header -> ELF 文件頭的位置是固定的
Segment Header Table -> ELF程序頭描述的段的相關(guān)信息
.shstrtab 該section包含了節(jié)的名稱
.bss 該section包含了在內(nèi)存中程序的未初始化的數(shù)據(jù),當程序運行開始時,系統(tǒng)將用0來初始化該區(qū)域。該section不占用文件空間,該section type = SHT_NOBITS
.init 
.text 可執(zhí)行區(qū)域(代碼)
.rodata 只讀數(shù)據(jù)
.data 和.data1 該section 包含了在內(nèi)存中程序的初始化數(shù)據(jù)
.debug 該section包含了符號調(diào)試信息
.dynamic 該section包含了動態(tài)鏈接信息,該section屬性將包含SHF_ALLOC比特位,而SHF_WRITE比特位是否為1取決于處理器
.dynsym 該section包含了動態(tài)鏈接符號表
.fini 該section 包含了用于終止進程可執(zhí)行指令代碼
.symtab 
.hash 包含了符號hash表
.line
.strtab 字符串表
.got 包含了全局偏移表
.plt 程序鏈接表
Section Header Table --> ELF 節(jié)頭表描述的是節(jié)區(qū)的信息 動態(tài)用段,靜態(tài)是節(jié)區(qū)
程序加載的時候只會加載LOAD 段

[圖片上傳失敗...(image-2b3061-1574847164757)]
)

ELF 常用的數(shù)據(jù)格式:

[圖片上傳失敗...(image-69c5aa-1574847164757)]
)

readelf 的使用:

-a 所有信息
-h 頭信息 magic type 段頭表,類型, 段頭偏移等
-l 
-S 節(jié)(動態(tài)叫段)
-e 

程序加載和動態(tài)鏈接

實現(xiàn)程序加載和動態(tài)鏈接的主要技術(shù)有:

程序頭部(Program Header):描述與程序執(zhí)行直接相關(guān)的目標文件結(jié)構(gòu)信息。用來在文件中定位各個段的映像。
同時包含其他一些用來為程序創(chuàng)建進程映像所必須的信息。
程序加載:給定一個目標文件,系統(tǒng)加載該文件到內(nèi)存,啟動程序執(zhí)行。
動態(tài)鏈接:系統(tǒng)加載了程序以后,必須通過解析構(gòu)成進程的目標文件之間的符號引用,以便完整地的構(gòu)造進程映像.

DEX 文件格式

開始:64 65 78 0A 30 35 00 

整體格式概要

image

DexFile整體文件結(jié)構(gòu)

DexHeader header;
DexStringId StringIds[stringIdsSize]
DexTypeId
DexProtoId
DexFieldId
DexMethodId
DexClassDef ClassDefs[]
DexData Data[] 數(shù)據(jù)
DexLink LinkData 鏈接

DexHeader

u1 magic[8] u幾就是表明占位幾個字節(jié) 版本信息
u4 checkSum 文件的校驗值 alder 32字節(jié)
u1 signature 簽名驗證(sha-1)
u4 fileSize 整個文件大小
u4 headerSize       //文件頭的大小
u4 linkSize //鏈接段的大小
u4 mapOff   //DexMapList文件偏移
u4 fieldIdsOff
....
u4 classDefsSize
u4 classDefsOff 

DexClassDef

classDefsSize 和 classDefsOff來表示 DexClassDef

struct DexClassDef{
    u4 classIdx;
    u4 accessFlags;
    u4 superClassIdx;
    u4 interfaceFileIdx;
}

詳細見如下圖:

image

文件格式相互之間的聯(lián)系

image

Dex文件結(jié)構(gòu)體
詳細鏈接安卓源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容