Переопределить реализацию функции внутри разделяемой библиотеки, но не вызываемую напрямую в нашей программе. - PullRequest
0 голосов
/ 18 июня 2020

Возможно ли в C ++ изменить поведение глобальной функции, которая находится внутри (не изолирована) от одной разделяемой библиотеки, но не вызывается программой напрямую? Программа динамически загружает разделяемую библиотеку и использует функцию dlopen и dlsym во время выполнения.

Например, функции foo() и bar() реализованы в libX.so, bar() вызовет foo(), программа вызовет только bar(). Можно ли изменить реализацию foo()? Предположим, что мы знаем имя manglename для foo().

Я рассмотрел идею с LD_PRELOAD, которая, как мне кажется, не является решением для этого случая, поскольку она меняет только порядок загрузки разделяемой библиотеки, а не переопределяет функция foo() в libX.so, т.е. bar() по-прежнему будет вызывать foo() с версией, реализованной самой разделяемой библиотекой.

Предположим, мы не можем изменить или перекомпилировать исходный код из общей библиотеки, возможно ли это? Заранее спасибо! Любая помощь приветствуется!

...