Linux用户空间ELF加载器

12

我需要做一件非常不寻常的事情:手动执行一个 ELF 可执行文件。也就是将所有节加载到正确的位置,查询 main() 并调用它(然后进行清理)。可执行文件将被静态链接,因此不需要链接库。我还控制基地址,因此不必担心可能出现的冲突。

那么,有没有相关的库呢?

我找到了 OSKit 及其 liboskit_exec,但该项目似乎自 2002 年以来就已停止开发。

我可以接受使用代码段(当然要遵守许可证),并将它们修改成我所需的,但由于我对 Linux 的世界还很陌生,我甚至不知道在哪里可以找到这些代码! :)

PS. 我需要在 ARM 平台上使用。

更新 好像加载 elfs 的问题需要一些良好的知识(叹气),所以我要去阅读一些规范和手册。而且我想我会坚持使用 bionic/linker 和 libelfsh。谢谢大家!

总结结果:


顶一下,我也遇到了完全相同的问题(在ARM上),不过我还需要进行重定位。 - Mads Elvheim
这件事发生了什么? 你有后续吗? - undefined
4个回答

2

快速的 apt-cache search 建议使用 libelf1, libelfg0 或者 libelfsh0。我认为在 elfsh 程序(在同名软件包中)中可能有一个有趣的实际例子,展示如何使用 libelfsh0

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


2
Google的Android在其“bionic”libc实现中具有完全重新实现的ELF加载程序。它相当干净,如果您正在寻找简单的东西,那么它可能是比glibc更好的来源。

0

看一下libelf,了解可执行文件格式的读取。我认为你可能会遇到麻烦。

听起来好像你不需要任何库,为什么不直接映射你的可执行文件,设置各种内存区域的数据并jmp/b in呢?

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


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个链接!)


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