Мое приложение Linux (A) ссылается на стороннюю совместно используемую библиотеку (B), к которой у меня нет исходного кода. Эта библиотека использует другую стороннюю разделяемую библиотеку, к которой у меня нет исходного кода (C). Я считаю, что (B) использует dlopen для доступа к (C) вместо прямой связи. Я считаю, что «ldd» на (B) не показывает (C), а objdump -X (B) показывает ссылки на dlopen / dlclose / dlsym.
Мое требование заключается в том, что мне нужно в моем коде для (A) получить указатель на функцию foo (), расположенную в (C). Обычно для этого я использовал бы dlsym, но мне нужно передать его дескриптору, возвращенному из dlopen, которого у меня нет, поскольку (B) этого не раскрывает.
-
Для более широкого контекста: мне нужно изменить функцию в (C) так, чтобы каждый раз, когда она вызывала свою вспомогательную функцию bar () (также расположенную в (C)), она также вызывала функцию с той же сигнатурой, расположенной в ( A) с теми же параметрами (в основном, мой код вводится в путь кода (C) foo () -> bar (). Я считаю, что я нашел способ сделать это с помощью gdb, но для того, чтобы перенести мой список команд gdb , но я застрял на шаге получения указателя на функцию.Я также открыт для альтернатив для выполнения той же задачи, а не для точной задачи, как указано выше
Редактировать: После написания этого я понял, что, возможно, я могу просто сделать еще один dlopen для файла в моем коде, и символы, возвращаемые через dlsym на этом дескрипторе, должны быть такими же, как полученные через оригинальный dlopen, если Я правильно читаю справочную страницу dlopen. Однако я все еще заинтересован в совете или помощи в моем более широком контексте, если есть лучший способ сделать это