我正在编写一个获取 elf 文件、加载它然后执行它的 c 程序。我已经阅读了所有标题(elf、section、program、relocation)。下一部分应该是获取要加载的内容,对吧?
我该如何进行?据我了解,我应该获取 LOAD、ALLOC 和 EXECINST 类型的部分或 LOAD 类型的程序段?或者什么?
当我获得所需的数据时,我应该使用 mmap() 将其映射到内存中。
我已经多次阅读 ELF 文档,但我仍然不知道如何进行。非常感谢任何帮助。
最佳答案
只有 PT_LOAD
段需要加载。但是,为可能需要在固定地址加载的主程序加载它们很复杂,因为您的加载程序可能已经将部分或全部地址范围用于其他内容。您可以作弊并为您的加载程序提供一个与“典型”主程序地址不同的基地址,并希望它能正常工作,或者您可以制作一个可重定位的加载程序,将其自身重新定位到不同的地址。
关于c - ELF文件的哪些部分应该加载到内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16840351/