Возможно ли в C ++ изменить поведение глобальной функции, которая находится внутри (не изолирована) от одной разделяемой библиотеки, но не вызывается программой напрямую? Программа динамически загружает разделяемую библиотеку и использует функцию dlopen и dlsym во время выполнения.
Например, функции foo()
и bar()
реализованы в libX.so
, bar()
вызовет foo()
, программа вызовет только bar()
. Можно ли изменить реализацию foo()
? Предположим, что мы знаем имя manglename для foo()
.
Я рассмотрел идею с LD_PRELOAD
, которая, как мне кажется, не является решением для этого случая, поскольку она меняет только порядок загрузки разделяемой библиотеки, а не переопределяет функция foo()
в libX.so
, т.е. bar()
по-прежнему будет вызывать foo()
с версией, реализованной самой разделяемой библиотекой.
Предположим, мы не можем изменить или перекомпилировать исходный код из общей библиотеки, возможно ли это? Заранее спасибо! Любая помощь приветствуется!