Может ли LD_PRELOAD заменить функцию, разрешенную с помощью dlopen()/dlsym()?C++

Программы на C++. Форум разработчиков
Anonymous
Может ли LD_PRELOAD заменить функцию, разрешенную с помощью dlopen()/dlsym()?

Сообщение Anonymous »

У меня есть сценарий, в котором:
  • Программа динамически загружает liba.so с помощью dlopen(), затем разрешает и вызывает из него функцию func1() через dlsym().
  • Я создал libb.so, который переопределяет функцию с тем же именем func1().
    Мой вопрос: можно ли использовать переменную среды LD_PRELOAD, чтобы заставить программу использовать func1() из libb.so вместо исходной func1() из liba.so? Если это невозможно по умолчанию, какие изменения (в программе, liba.so или libb.so) потребуются, чтобы LD_PRELOAD работал в этом случае?
На самом деле я написал libb.so вместе с функцией func1(). После этого я попытался подключить исходную функцию func1(), используя переменную среды LD_PRELOAD. Однако ничего не произошло — мой крючок не подействовал. Я подозреваю, что LD_PRELOAD не может перехватывать функции, разрешенные с помощью dlsym(). Интересно, верно ли это предположение.

Подробнее здесь: https://stackoverflow.com/questions/798 ... open-dlsym

Вернуться в «C++»