Linux用户空间ELF加载器

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

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

我发现OSKit和它的liboskit_exec,但自2002年以来似乎已经死了。

我可以参与部分项目(当然尊重许可证),并根据我的需要定制它们,但是因为我在Linux世界中是个不错的select,所以我甚至不知道在哪里find这些部分! 🙂

PS。 我需要ARM平台。

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

总结发现:

  • libelf : http : //directory.fsf.org/project/libelf/
  • elfsh和libelfsh (现在是eresi的一部分): http ://www.eresi-project.org/
  • elfio (另一个精灵库): http : //sourceforge.net/projects/elfio/
  • OSKit和liboskit_exec (过时): http : //www.cs.utah.edu/flux/oskit/
  • 仿生/链接器 : https : //android.googlesource.com/platform/bionic

Solutions Collecting From Web of "Linux用户空间ELF加载器"

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

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

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

看看libelf的可执行格式。 我认为你会遇到麻烦。

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

我不知道ARM是否有一个相当于NX的位,但值得检查。

这个工具包含一个ELF加载器: http : //bitwagon.com/rtldi/rtldi.html

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