我需要做一件非常不寻常的事情:手动执行elf可执行文件。即将所有部分加载到正确的位置,查询main()并调用它(然后清理)。可执行文件将静态链接,因此不需要链接库。我也控制基地址,所以不用担心可能的冲突。
那么,是否有任何库?
我找到了OSKit及其liboskit_exec,但自2002年以来项目似乎已经死了。
我可以接受部分项目(当然是尊重许可证)并根据我的需要定制它们,但由于我在linux世界中相当不错,我甚至不知道在哪里可以找到这些部件! :)
PS。我需要ARM平台。
UPD 嗯,加载精灵的问题似乎需要一些关于它的好知识(叹气),所以我出去阅读一些规格和手册。我想我会坚持使用仿生/链接器和libelfsh。多谢你们!
总结发现:
答案 0 :(得分:2)
快速apt-cache search
建议libelf1
,libelfg0
和/或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个链接!)