Подтвердить что ты не робот

Линейный загрузчик ELF для Linux

Мне нужно сделать довольно необычную вещь: вручную выполнить исполняемый файл эльфа. То есть загружать все разделы в нужные места, запрашивать main() и вызывать его (и затем очищать). Исполняемые файлы будут статически связаны, поэтому нет необходимости связывать библиотеки. Я также управляю базовым адресом, поэтому не беспокойтесь о возможных конфликтах.

Итак, существуют ли для этого библиотеки?

Я нашел OSKit и его liboskit_exec, но проект кажется мертвым с 2002 года.

Я в порядке с частью проектов (уважая лицензии, конечно) и подгоняю их к моей потребности, но поскольку я совершенно нул в мире Linux, я даже не знаю, где найти эти части!:)

PS. Мне нужно это для платформы ARM.

UPD Ну, вопрос загрузки эльфов, похоже, требует хороших знаний об этом (вздох), поэтому я прочел некоторые спецификации и руководства. И я думаю, что буду придерживаться бионического/линкера и libelfsh. Спасибо, парни!

Подводя итоги:

4b9b3361

Ответ 1

Быстрый apt-cache search предлагает libelf1, libelfg0 и/или libelfsh0. Я думаю, что программа elfsh (в пакете тезка) может быть интересным практическим примером использования libelfsh0.

Я сам не пробовал, но надеюсь, что они будут полезны. Удачи: -)

Ответ 2

Google Android, в нем "бионная" реализация libc, имеет полностью переопределенный загрузчик ELF. Это разумно чистый и, вероятно, лучший источник, чем gilbc, если вы ищете что-то простое.

Ответ 3

Посмотрите libelf для чтения исполняемого файла. У вас будут проблемы с этим, я думаю.

Похоже, поскольку вам не нужны библиотеки ни для чего, почему бы не просто mmap ваш исполняемый файл, установить данные о различных областях памяти и jmp/b в?

Я не знаю, имеет ли ARM эквивалент NX-бит, но стоит проверить.

Ответ 4

Этот инструмент содержит загрузчик 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 ссылку!)