Linux userland exec

Мне нужна библиотека C, которая позволяет мне exec() статически связанный двоичный файл, без вызова системного вызова execve(). Причина, по которой системный вызов не работает, заключается в том, что двоичный файл не является исполняемым, и сделать его исполняемым в этой системе невозможно. Для динамически связанных двоичных файлов, работающих /lib/ld-linux.so.2 progname делает трюк, но это segfaults в моем статически связанном двоичном файле.

Я нашел ul_exec 1.1 на http://archive.cert.uni-stuttgart.de/bugtraq/2004/01/msg00002.html, но, похоже, в моей системе он использует segfault для своего собственного бинарного файла Hello, World.

Один из вариантов - сделать копию двоичного файла, сделать копию исполняемой и вызвать execve(). Я ищу решение, которое не нуждается в такой копии (из соображений производительности).

3 ответа

Решение

Я обновил пользовательское приложение Grugq для работы с современными x86 Linux. Я написал x86_64 userland exec с нуля.

Тогда как насчет файловой системы пользовательского режима (например, с использованием python-fuse), которая отображает бит выполнения в любой указанный файл? будет ли это слишком большой удар производительности?

Есть хорошая короткая вики-статья с некоторыми не полностью готовыми к реализации реализациями: http://plash.beasts.org/wiki/UserModeExec

Другие вопросы по тегам