1

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

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

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

我现在已经多次阅读 ELF 文档,但我仍然不知道如何继续。非常感谢任何和所有帮助。

4

2 回答 2

2

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

于 2013-05-30T16:16:00.880 回答
0

这是由操作系统本身完成的。只需要执行二进制文件。更多详细信息请参考 Linux 的动态链接器模块的源代码。

于 2013-05-30T16:01:54.393 回答