Получить имя общей библиотеки из функции в библиотеке - PullRequest
0 голосов
/ 10 декабря 2018

В linux, есть ли способ получить имя разделяемой библиотеки из одной из ее функций (или из любых статических функций библиотеки, связанных с ней).

По сути, хотел проверить, существует ли API /переменная доступна аналогично program_invocation_short_name/program_invocation_name, которая в настоящее время доступна для процессов.

1 Ответ

0 голосов
/ 10 декабря 2018

Если вы хотите узнать, существует ли динамический символ с именем "foo", используйте dlsym(RTLD_DEFAULT, "foo"), чтобы узнать адрес такого символа, или NULL, если такого динамического символа нет.

Я не знаю, почему вас волнует имя общей библиотеки.

Если у вас есть адрес символа, вы всегда можете прочитать /proc/self/maps псевдофайл, чтобы узнать, из какого двоичного файла происходит символ.(Если символ находится в отображении r--, он является неизменным, как, например, строковый литерал. Если он находится в отображении r-x, он находится в коде, возможно, в функции. Он, если в rw- mapping, это глобальная переменная.) Обратите внимание, что, поскольку это псевдофайл, он является частью двоичного интерфейса ядра и никогда не локализуется.

...