Как выполнить программу из файлового дескриптора? - PullRequest
7 голосов
/ 23 мая 2010

Мне нужно выполнить файл, когда я знаю только дескриптор. Также возможно, что нет никаких ссылок на файл, так что узнать имя как-то не вариант. Все функции execve (), execvp () и т. Д. Принимают имя файла. dlopen () также принимает имя.

Уродливые решения (такие как чтение файла и вызов указателя на некоторую функцию) в порядке.

Ответы [ 2 ]

8 голосов
/ 23 мая 2010

Использование fexecve.

PS: чтение файла и вызов некоторого указателя на функцию определенно не ОК. :)

1 голос
/ 23 мая 2010

Интересно. Я думаю, что вам лучше всего использовать FD, который вы должны написать временный файл, а затем выполнить его с помощью обычного вызова exec.

Вы можете использовать mkstemp, чтобы создать гарантированное уникальное имя файла. Затем прочитайте содержимое из вашего файлового дескриптора и поместите его во временный файл. Затем используйте имя, данное вам mkstemp в вызове exec.

Если вы по какой-то причине не хотите писать новый файл, то я думаю, что единственным вариантом для вас будет вручную проанализировать образ exe-файла, правильно загрузить его в память и затем вызвать его main () функция. Это дублирует многие функциональные возможности, которые уже существуют в ОС, и я не думаю, что вы хотите это делать. Это будет трудно сделать правильно, и, похоже, не стоит усилий.

...