Как я могу загрузить внешний файл / программу в память и затем выполнить ее (C ++ и Unix)? - PullRequest
0 голосов
/ 18 января 2012

Допустим, у меня есть исполняемый файл с именем "execfile". Я хочу прочитать этот файл с помощью программы на C ++ (в Unix) и затем выполнить его из памяти. Я знаю, что это возможно в Windows, но я не смог найти решение для Unix.

В псевдокоде это будет примерно так:

declare buffer (char *)
readfile "execfile" in buffer
execute buffer

Просто чтобы прояснить: очевидно, я мог бы просто выполнить файл, используя system("execfile"), но, как я уже сказал, это не то, что я намерен делать.

Спасибо.

РЕДАКТИРОВАТЬ 1: Чтобы сделать это еще более понятным (и причина, по которой я не могу использовать dlopen): мне нужна эта функция, потому что исполняемые файлы будут генерироваться динамически, и поэтому я не могу просто собрать все они одновременно в одной библиотеке. Чтобы быть более точным, я создаю инструмент, который сначала зашифрует исполняемый файл ключом, а затем сможет выполнить этот зашифрованный файл, сначала расшифровав его, а затем выполнив его (и я не хочу иметь копию расшифрованного файла в файловой системе).

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Вы не можете без написания горы кода.Загрузка и компоновка a.out - это средство ядра, а не средство пользовательского режима в linux.

Было бы лучше создать общую библиотеку и загрузить ее с помощью dlopen.

0 голосов
/ 18 января 2012

Решение для загрузки и запуска - не обязательно в C ++ - это использование dlopen + dlsym для загрузки динамической библиотеки и получения указателя на функцию, определенную в библиотеке.

См. C ++ dlopen mini HOWTO для описания решения проблем с символами C ++ в динамических библиотеках.

...