Linux user-space ELF loader

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-03 07:25:22

问题


I need to do a rather unusual thing: manually execute an elf executable. I.e. load all sections into right places, query main() and call it (and cleanup then). Executable will be statically linked, so there will be no need to link libraries. I also control base address, so no worries about possible conflicts.

So, is there are any libraries for that?

I found OSKit and its liboskit_exec, but project seems to be dead since 2002.

I'm OK with taking parts of projects (respecting licenses, of course) and tailoring them to my need, but as I'm quite a noob in the linux world, I dont even know where to find those parts! :)

PS. I need that for ARM platform.

UPD Well, the matter of loading elfs seems to require some good knowledge about it (sigh), so I'm out to read some specs and manuals. And I think I will stick to bionic/linker and libelfsh. Thanks guys!

Summarized findings:

  • libelf: http://directory.fsf.org/project/libelf/
  • elfsh and libelfsh (are now part of eresi): http://www.eresi-project.org/
  • elfio (another elf library): http://sourceforge.net/projects/elfio/
  • OSKit and liboskit_exec (outdated): http://www.cs.utah.edu/flux/oskit/
  • bionic/linker: https://android.googlesource.com/platform/bionic

回答1:


A quick apt-cache search suggests libelf1, libelfg0 and/or libelfsh0. I think the elfsh program (in the namesake package) might be an interesting practical example of how to use libelfsh0.

I haven't tried any myself, but I hope they might be helpful. Good luck :-)




回答2:


Google's Android, in it's "bionic" libc implementation, has a completely reimplemented ELF loader. It's reasonably clean, and probably a better source than gilbc if you're looking for something simple.




回答3:


Take a look at libelf for reading the executable format. You are going to have trouble with this I think.

Sounds like, as you don't need libraries for anything, why not just mmap your executable, set data about various memory areas and jmp/b in?

I don't know if ARM has an NX-bit equivalent, but worth checking.




回答4:


This tool contains an ELF loader: http://bitwagon.com/rtldi/rtldi.html

I reused the code from rtldi for an ELF chainloader in another project. The code is here: http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877 and there is some background here: http://plash.beasts.org/wiki/Story16. (Apparently I have to break these links because stackoverflow won't let me post >1 link!)



来源:https://stackoverflow.com/questions/1784495/linux-user-space-elf-loader

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!