[关闭]
@ltlovezh 2020-04-02T02:00:34.000000Z 字数 627 阅读 103

ELF

C++


elf视图

左边是ELF的链接视图,可以理解为是.o目标代码文件或者链接后的.so(共享库)的内容布局。右边是ELF的执行视图,可以理解为可执行文件的内容布局。
注意目标代码文件的内容是由section组成的,而可执行文件的内容是由segment组成的。

链接器把ELF文件看成是Section的集合,而加载器把ELF文件看成是Segment的集合。

链接视图:
静态链接器(即编译后参与生成最终ELF过程的链接器,如ld )会以链接视图解析ELF。编译时生成的 .o(目标文件)以及链接后的 .so (共享库)均可通过链接视图解析,链接视图可以没有段表(如目标文件不会有段表)。
执行视图:
动态链接器(即加载器,如x86架构 linux下的 /lib/ld-linux.so.2或者安卓系统下的 /system/linker均为动态链接器)会以执行视图解析ELF并动态链接,执行视图可以没有节表。

找出一个Section
先找到section header,然后根据其中的section地址偏移和size,读出section内容。

参考文章

  1. 计算机那些事(4)——ELF文件结构
  2. ELF文件解析(一):Segment和Section
  3. ELF文件解析(二):ELF header详解
  4. ELF格式探析之三:sections
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注