Я объясню:
Скажем, меня интересует замена функции 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 отлично подходит для этой цели, поскольку он позволяет вводить код в определенный процесс.