Я объясню:
Скажем, меня интересует замена функции rand()
, используемой определенным приложением.
Итак, я подключаю gdb к этому процессу и загружаю свою собственную общую библиотеку (которая имеет настраиваемую функцию rand()
):
call (int) dlopen("path_to_library/asdf.so")
Это помещает настроенную rand()
функцию внутри памяти процесса. Однако в этот момент символ rand будет по-прежнему указывать на функцию по умолчанию rand()
. Есть ли способ сделать gdb указывать символ на новую функцию rand()
, заставляя процесс использовать мою версию?
Я должен сказать, что мне также запрещено использовать методы LD_PRELOAD
(linux) и DYLD_INSERT_LIBRARIES
(mac os x) для этого, потому что они позволяют вводить код только в начале выполнения программы.
Приложение, которое я хотел бы заменить rand()
, запускает несколько потоков, а некоторые из них запускают новые процессы, и мне интересно вводить код в один из этих новых процессов. Как я уже упоминал выше, GDB отлично подходит для этой цели, поскольку он позволяет вводить код в определенный процесс.