Linux用户空间ELF加载程序

时间:2009-11-23 16:57:51

标签: linux arm loader elf manual

我需要做一件非常不寻常的事情:手动执行elf可执行文件。即将所有部分加载到正确的位置,查询main()并调用它(然后清理)。可执行文件将静态链接,因此不需要链接库。我也控制基地址,所以不用担心可能的冲突。

那么,是否有任何库?

我找到了OSKit及其liboskit_exec,但自2002年以来项目似乎已经死了。

我可以接受部分项目(当然是尊重许可证)并根据我的需要定制它们,但由于我在linux世界中相当不错,我甚至不知道在哪里可以找到这些部件! :)

PS。我需要ARM平台。

UPD 嗯,加载精灵的问题似乎需要一些关于它的好知识(叹气),所以我出去阅读一些规格和手册。我想我会坚持使用仿生/链接器和libelfsh。多谢你们!

总结发现:

4 个答案:

答案 0 :(得分:2)

快速apt-cache search建议libelf1libelfg0和/或libelfsh0。我认为elfsh程序(在同名包中)可能是如何使用libelfsh0的一个有趣的实际示例。

我自己没有尝试过,但我希望他们可能会有所帮助。祝你好运: - )

答案 1 :(得分:1)

谷歌的Android,在它的“仿生”libc实现中,有一个完全重新实现的ELF加载器。这是相当干净的,如果你正在寻找简单的东西,它可能是比gilbc更好的来源。

答案 2 :(得分:0)

查看libelf以阅读可执行格式。我想你会遇到麻烦。

听起来,因为你不需要任何库,为什么不只是mmap你的可执行文件,设置有关各种内存区域和jmp / b的数据?

我不知道ARM是否具有NX位等效,但值得检查。

答案 3 :(得分:0)

此工具包含ELF加载程序:http://bitwagon.com/rtldi/rtldi.html

我在另一个项目中重用了rtldi中的代码用于ELF链式加载器。代码在这里:http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877,这里有一些背景:http://plash.beasts.org/wiki/Story16。 (显然我必须打破这些链接,因为stackoverflow不会让我发布> 1个链接!)