當前位置:商標查詢大全網 - 網遊競技 - ELF文件淺析

ELF文件淺析

前言:在逆向工作流程中,我們會接觸到so文件,並且在某種情況下會對so文件進行處理。 在文件的角度而言,so隸屬於 ELF 文件。 站在ELF文件角度來分析壹下so文件。

ELF 文件大致分為3個主要部分

1、ELF HEAD --ELF文件頭部分

2、 Program Header Table --程序頭表

3、Section Header Table --節頭表

這個部分稱為“頭”,裏面大致描述在這個文件裏面的組織。如:文件魔術、目標架構體系(如ARM、X86...)、版本信息、各個部分的大小、各個部分的偏移起始地址等等。

下面描述的位置都是固定的,且位置都是緊接著下壹部分的位置。(有誤歡迎指出)

這裏我用的是IDA的android_server文件做演示,來簡單看壹部分內容。

文件的標識信息(e_ident):前16字節 (包括魔術部分:前4字節 如.ELF)

文件類型(e_type ):2字節

目標架構(e_machine ):2字節

版本(e_version):4字節

程序入口虛擬地址(e_entry ):4字節

程序頭部表偏移地址(e_phoff ):4字節

節區頭部表偏移地址(e_shoff ):4字節

保存與文件相關的,特定於處理器的標誌(e_flags ):4字節

ELF頭的大小(e_ehsize ):2字節

每個程序頭部表的大小(e_phentsize ):2字節

程序頭部表的數量(e_phnum ):2字節

每個節區頭部表的大小(e_shentsize):2字節

節區頭部表的數量(e_shnum ):2字節

節區字符串表位置(e_shstrndx):2字節

......

程序頭表描述的是程序裏面各個段的信息。

這裏來舉例看壹下

比如程序頭,第壹部分, 這個部分描述程序頭的信息,比如類型、大小、偏移等等;這個部分描述的就是程序頭的信息。

壹個程序中到底有多少節信息,取決於這壹部分,節頭表。

比較經典的,就是這裏的導出函數信息。