日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

elf文件结构解析

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elf文件结构解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

elf文件解析

  • 1、ELF文件結構格式:
  • 2、ELF頭文件解析:
  • 3、ELF段表:

1、ELF文件結構格式:

ELF Header
.text
.data
.bss
section header table
string tables
symbol tables

elf文件頭包含了整個文件的基本屬性,如文件版本,入口地址等,接著就是ELF文件的各個段

2、ELF頭文件解析:

linux定義了自己的一套變量體系,如下

自定義類型描述長度(字節)
Elf32_Addr32位版本程序地址4
Elf32_Half32位版本的無符號短整形2
Elf32_Off32位版本的偏移地址4
Elf32_Sword32位版本有符號整形4
Elf32_Word32位版本無符號整形4
Elf64_Addr64位版本程序地址8
Elf64_Half64位版本的無符號短整形2
Elf64_Off64位版本的偏移地址8
Elf64_Sword64位版本有符號整形4
Elf64_Word64位版本無符號整形4

以32位版本為例,其頭定義如下
typedef struct{
unsigned char e_ident[16];//前四個字節為ELF文件魔術,第五個字節為ELF文件類,0x01為32位,0x02為64位;第6位為字節序,規定為大端緒還是小端;第7位為elf文件的版本號,后9字節未定義,可作為擴展標志
Elf32_Half e_type;//ELF文件類型,1表示可重定位文件,2表示可執行文件,3表示共享文件
Elf32_Half e_machine;//ELF文件運行平臺,1為AT&T WE 32100,2為SPARC,3為intel x86,4為Motorola 68000,5為Motorola 88000,6為intel 80860,
Elf32_Word e_version;//elf版本號
Elf32_Addr e_entry;//程序入口地址
Elf32_Off e_phoff;//程序表頭文件偏移
Elf32_Off e_shoff;//段表在FOA中的便宜
Elf32_Word e_flags;//標志位,用來標志文件平臺等
Elf32_Half e_ehsize;//ELF文件頭大小
Elf32_Half e_phentisize;//程序頭表大小
Elf32_Half e_phnum;//程序頭表數目
Elf32_Half e_shentsize;//段表描述符大小
Elf32_Half e_shnum;//段表數量
Elf32_Half e_shstrndx;//段表字符串表所在段在段表中的下標
}Elf32_Ehdr;

我們以一個ELF文件為例,

可以看到ELF頭文件信息,我們打開以16進制打開一個這個文件

第一行前4個字節為 7F 45 4C 46,這個為ELF文件的魔數,其為DEL控制符,第5個字節為01,表示此文件為32位,第6個字節01表示小端序。與解析出的頭文件內容相一致。
第二行的前2個字節為0x0002(小端序),表示為此文件類型為可執行文件,第3,4字節為0x0003,表示在intel x86平臺運行,第5-8字節為0x00000001,表示版本號為0x1,第9-12字節為0x080484B0,表示程序的入口地址。
第三行的前四個字節為0x00002224,表示段表在文件中的偏移。第5-8個字節為0x00000000,為平臺信息,等等后面可依次解析

3、ELF段表:


成員信息如下:

由上知,elf段表的文件偏移為0x2224,找到文件偏移位置,如下

由上知第一個段表全為空,段表解析就不一一闡述,本文件的段表信息如下圖

總結

以上是生活随笔為你收集整理的elf文件结构解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。