Могу ли я динамически загрузить исполняемый файл в Linux?

1

Я написал небольшую платформу тестирования, которая использует "nm" для проверки разделяемых библиотек и поиска тестовых функций. Затем я использую библиотеку ctypes Python для динамической загрузки общего объекта и выполнения тестовых функций. Есть ли способ сделать это с помощью исполняемого файла? Когда я попробовал тот же трюк в исполняемом модуле, Python сообщил, что он не может динамически загружать исполняемый файл.

  • 0
    Какие флаги компиляции вы использовали для сборки .SO, когда Python жаловался?
  • 0
    Так что работало нормально, когда я создавал исполняемый файл, все не работало. Для exe я использовал: g ++ -Wl, -rpath ,. -Wl, -rpath-link, build / debug / final -o build / debug / final / фиктивная сборка / debug / промежуточный / dummy / projects / dummy / main.o
Показать ещё 1 комментарий
Теги:
dynamic-linking

2 ответа

3

Если это ваше собственное приложение, вы можете изменить порядок сборки, чтобы ваш исполняемый файл был только main() { real_main(); } и real_main() находится в libapp.so. Затем вы можете протестировать libapp.so с помощью существующего кода.

Если возможно загрузить другой исполняемый файл, возможно, это связано с загрузкой ld.so и получением его для выполнения работы. Если вы запустите /lib/ld-linux.so (в Linux), он будет печатать строфу с информацией.

  • 0
    Благодарю. Да, я могу переместить весь свой код в общий объект. Я создаю инструменты для команды, поэтому я бы не стал навязывать это всем своим программистам.
1

Попробуйте связать исполняемый файл с опцией -pie (если у вас есть возможность сделать это).

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

  • 2
    Спасибо! это был отличный указатель. В дополнение к -pie мне также пришлось связать с -Wl, - export-dynamic. Работал замечательно.
  • 0
    @samwise: вы также можете передать -rdynamic в драйвер компилятора, если -Wl,--export-dynamic чувствует себя слишком многословным ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню