如何动态加载可重定位的 ELF 可执行文件?

5

我正在尝试为ARM平台编写ELF可执行文件加载程序。这里有一些问题:

1)如何生成可重定位或位置无关的ELF可执行文件(需要哪些编译器和链接器选项)2)如何加载上述生成的ELF可执行文件。

作为一个开始,我已经做了一些工作,而且它运行得很好。我在构建时使用固定地址RO_Base并没有分割段(不使用任何--split选项),这样我就获得了连续的代码、数据和bss部分。之后,我将ELF加载到与RO_Base相同的地址,并将代码作为新线程执行。这个方法运行良好。我没有进行任何重定位等操作。

现在我想使它具有动态性,并能够通过生成可重定位ELF并修改加载程序以适当地更改来加载到任何地址。请帮助我使其正常工作。

谢谢!

2个回答

0

这是一个很大的话题。我将提到 John R. Levine 的参考书 "Linkers and Loaders"。这是该书的手稿,第7章 重定位。希望对您有所帮助。


0

只需在链接器中使用-r标志即可使文件可重定位。

使用类似this的东西将文件在内存中重定位。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接