Ссылка foo.so
против bar.so
.
Когда исполняемый файл dlopen()
s foo.so
, bar.so
также будет загружен.
Кроме того, можно выполнить двоичное исправление исполняемого файла, добавив RTLD_GLOBAL
к флажкам для вызова dlopen()
. Код будет выглядеть примерно так:
movl $2, 4(%esp) # $2 == RTLD_NOW; RTLD_LOCAL is 0
movl $0xNNNNN, (%esp) # $0xNNNNN == &"foo.so"
call dlopen
Вместо этого укажите movl $0x102, 4(%esp)
(RTLD_GLOBAL == 0x100
) и вуаля.
EDIT:
Если вам известно имя bar.so
, то вы можете связать foo.so
с "заглушкой" bar.so
. Неважно, что у вас нет «настоящего» * 1023 *; все, что имеет значение, это то, что foo.so
зависит от него. Во время выполнения эта зависимость приведет к загрузке bar.so
при загрузке foo.so
.