c - ELF文件的哪些部分应该加载到内存中?

标签 c elf sections

我正在编写一个获取 elf 文件、加载它然后执行它的 c 程序。我已经阅读了所有标题(elf、section、program、relocation)。下一部分应该是获取要加载的内容,对吧?

我该如何进行?据我了解,我应该获取 LOAD、ALLOC 和 EXECINST 类型的部分或 LOAD 类型的程序段?或者什么?

当我获得所需的数据时,我应该使用 mmap() 将其映射到内存中。

我已经多次阅读 ELF 文档,但我仍然不知道如何进行。非常感谢任何帮助。

最佳答案

只有 PT_LOAD 段需要加载。但是,为可能需要在固定地址加载的主程序加载它们很复杂,因为您的加载程序可能已经将部分或全部地址范围用于其他内容。您可以作弊并为您的加载程序提供一个与“典型”主程序地址不同的基地址,并希望它能正常工作,或者您可以制作一个可重定位的加载程序,将其自身重新定位到不同的地址。

关于c - ELF文件的哪些部分应该加载到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840351/

相关文章:

swift - 使用 swift 在 Xcode 中插入带有 UIButton(或 Bar 按钮)的新部分

c - 二进制数据转整数?

c - 如何获取整数数组的降序(序数)?

assembly - GAS ELF何时需要使用.type,.thumb,.size和.section指令?

elf - LD_BIND_NOW 对 ELF PIE 可执行文件不起作用

swift - 部分索引更改时 NSFetchedResultsController 崩溃

C: undefined reference `dlopen`/`dlsym` 尽管添加了 `-ldl` 标志

c - block 内变量的声明也是定义吗?

c++ - elf 文件中 .bss 段空间的地址空间

themes - Shopify 的新主题编辑器未显示自定义部分