1

任何人都可以分享一些链接或书籍,详细解释如何从 ELF 文件创建进程。大多数免费提供的材料似乎都是抽象的,没有解释大多数细节,例如从程序头中获取的信息以及过程映像如何使用该信息在内存中。谢谢

4

1 回答 1

1

elf 文件的工作方式如下 每个段描述了一堆共享相同特征的段,例如加载到内存,每个段都有它的权限,例如读写或执行,基本上发生的情况是每个段都有一些头(phdr )该标头包含该段应加载到内存的虚拟地址,其大小和ELF中实际二进制数据的偏移量这对于部分来说是相同的,每个部分都有一些要加载到的虚拟地址,大小偏移到二进制文件中的数据,还有 thag 内存的权限(写入/读取/执行)现在操作系统从文件映像中创建进程的操作被读取并解析所有部分,如果存在加载标志,则将其二进制数据加载到内存中,并赋予该内存部分适当的权限。二进制数据的一个例子是机器指令 - 实际代码,例如.text部分通常包含二进制指令(代码)。节的另一个很好的例子是 .data ,它将包含某些进程的全局变量并且应该只有读写权限,一般的 elf 头文件也包含称为入口点的东西 - 要执行的第一条指令的虚拟地址(鉴于包含机器代码的部分已成功加载到它给出的虚拟地址)

elf 文件要复杂得多,但通常这就是它所包含的内容,它包含对链接器和动态链接器有用的数据,例如重定位和符号表,但基本上这是加载 elf 文件时发生的情况,这里有一些很好的链接了解有关此主题的更多信息:http: //flint.cs.yale.edu/cs422/doc/ELF_Format.pdf

另外,如果您使用一些基于 linux 的系统,请尝试使用readelfand objdump,就个人而言,它帮助我学到了很多东西

于 2016-08-09T11:01:38.313 回答