Теперь у меня есть файл .so, но нет связанных заголовков.
Есть ли рекомендуемые методы для анализа и использования функций внутри библиотеки?
Хорошо, я думаю, что это может быть две части:
«как загрузить библиотеку» и «как использовать библиотеку».
Сначала я попытался использовать dlopen, чтобы загрузить его,
затем компиляция прошла, но при выполнении произошла ошибка сегментации.
Я попытался с системной встроенной библиотекой вместо этого, и все в порядке
поэтому я подумал, может, мне следует подключить GDB к .so во время выполнения, чтобы увидеть, что случилось?
Но перед этим я использую nm, чтобы перечислить имена функций общего объекта,
это работает хорошо, поэтому я думаю, что общий объект не был сломан.
Или, может быть, я должен попытаться восстановить заголовок из результатов NM?
Это возможно? как?
следовать за:
Я все еще программировал с помощью dlopen () и пытался скомпилировать с -L [library_search_path] -l [имя_библиотеки]
напр .: -L / home / test -ltest
и получил следующие ошибки:
/home/test/libtest.so: undefined reference to「SSL_connect」
/home/test/libtest.so: undefined reference to「TLSv1_client_method」
/home/test/libtest.so: undefined reference to「SSL_CTX_set_verify」
/home/test/libtest.so: undefined reference to「SSL_CTX_check_private_key」
/home/test/libtest.so: undefined reference to「SSL_get_peer_certificate」
Я обнаружил, что OpenSSL еще не установлен.
После завершения установки я снова скомпилировал с дополнительным -lssl -lcrypto
,
затем компиляция работ, но выполнение не удалось со следующими:
ошибка при загрузке общих библиотек: libssl.so.1.0.0: не удается открыть файл общего объекта: нет такого файла или каталога
Исполняемый файл не может найти установленную libssl,
поэтому я добавляю флаги с -Wl,-rpath,/usr/local/lib
,
Ну, библиотека теперь может быть загружена 🙂
Теперь я понимаю, как использовать dlsym () с функциями преобразования имен …
Задача ещё не решена.
Других решений пока нет …