【问题标题】:How is a process created from an ELF file?如何从 ELF 文件创建进程?
【发布时间】:2016-12-15 00:24:09
【问题描述】:

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

【问题讨论】:

标签: exec executable elf executable-format


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多