我正在编写一个获取elf文件的c程序,加载它然后执行它。我已阅读所有标题(精灵,部分,程序,重定位)。下一部分应该是要加载什么,对吗?
我该怎么办?据我所知,我应该得到LOAD,ALLOC和EXECINST类型的部分或LOAD类型的程序段?或者是什么?
当我得到所需数据时,我应该用mmap()将其映射到内存中。
我现在已多次阅读ELF文档,但我仍然不知道如何继续。非常感谢任何和所有帮助。
答案 0 :(得分:2)
只需要加载PT_LOAD
段。但是,为主程序加载它们可能需要加载到固定地址,这很复杂,因为加载器可能已经在使用部分或全部地址范围。您可以欺骗并为您的加载程序提供与“典型”主程序地址不同的基址,并希望它可以工作,或者您可以创建一个可重定位的加载程序,将其自身重定位到不同的地址。
答案 1 :(得分:0)
这是由操作系统本身完成的。只需要执行二进制文件。有关更多详细信息,请参阅Linux动态链接器模块的源代码。