12

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

那么,是否有任何图书馆呢?

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

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

PS。我需要 ARM 平台。

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

总结发现:

4

4 回答 4

2

快速apt-cache search建议libelf1libelfg0和/或libelfsh0。我认为该elfsh程序(在同名包中)可能是如何使用libelfsh0.

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

于 2009-11-23T17:05:14.907 回答
1

Google 的 Android 在其“仿生”libc 实现中具有完全重新实现的 ELF 加载器。它相当干净,如果您正在寻找简单的东西,它可能比 gilbc 更好。

于 2009-11-23T19:13:45.130 回答
0

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

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

我不知道 ARM 是否有 NX 位等价物,但值得一试。

于 2009-11-23T17:05:25.887 回答
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 个链接!)

于 2009-11-27T18:43:51.823 回答