Эта статья имеет довольно простую пошаговую демонстрацию. Однако наличие для вызова GC вместо того, чтобы позволить это взять его естественный курс обычно является знак плохого дизайна/управления памятью, особенно , если никакие ограниченные ресурсы не используются (соединения, дескрипторы, что-либо еще, что обычно приводит к реализации IDisposable).
, Что заставляет Вас должны делать это?
Быстрый поиск apt-cache
предлагает libelf1
, libelfg0
и / или libelfsh0
. Я думаю, что программа elfsh
(в одноименном пакете) может быть интересным практическим примером того, как использовать libelfsh0
.
Я сам не пробовал, но надеюсь, что они может быть полезно. Удачи: -)
Взгляните на libelf для чтения исполняемого формата. Я думаю, у вас будут проблемы с этим.
Похоже, поскольку вам ни для чего не нужны библиотеки, почему бы просто не использовать mmap для вашего исполняемого файла, установить данные о различных областях памяти и jmp / b?
I не знаю, есть ли у ARM эквивалент NX-битов, но стоит проверить.
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.
Этот инструмент содержит загрузчик 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
. (Очевидно, мне нужно разорвать эти ссылки, потому что stackoverflow не позволяет мне опубликовать> 1 ссылку!)