Есть ли способ прочитать содержимое файла .SO (общие объекты), не загружая его?
Мой сценарий использования:
Примечание: я могу легко сделать эти вещи на DLL. Также я работаю над окнами, поэтому я не могу загрузить файл .SO.
Спасибо
Для экрана: readelf -a <file>
Чтобы сохранить вывод, поместите его в файл. Например, я изучаю модуль Python RPi.GPIO на Raspberry Pi, который хранится в /usr/lib/python2.7/dist-packages/RPi, поэтому я запускаю:
readelf -a GPIO.so > ~/gpio.so.out
Вы можете прочитать эти файлы с помощью инструментов, включенных в GNU binutils. Хотя GNU binutils обычно устанавливается в системах Linux, это не относится к Windows. Тем не менее, они работают в Cygwin или MinGW под Windows.
Ресурсы:
Обратите внимание, что с MinGW (3.) вам не нужен Cygwin (2.) и вы сами компилируете Binutils (1.). Binutils включен в MinGW (3.), но вы также можете попробовать загрузить только часть Binutils из MinGW (4.).
Как пользоваться nm
а также readelf
Для получения информации здесь поясняется:
Как мне перечислить символы в .so файле
Если вы хотите включить эту функцию в программу на C ++, вы можете включить исходный код этих инструментов (остерегаться лицензии!) Или вызвать их из своей программы. Возможно, вам понадобится среда Cygwin для компиляции исходного кода под Windows.
да, необходимо решение для ОС Windows. Я использовал инструмент nm.exe, присутствующий в инструментах ndk в Android SDK / ndk.
я сбросил вывод nm.exe в какой-то файл, а затем с помощью регулярного выражения извлек из него все классы и методы.