Voy a explicar:¿Puede gdb hacer que un puntero a otra posición funcione?
Digamos que estoy interesado en reemplazar la función rand()
utilizada por una determinada aplicación.
Así que adjuntar gdb a este proceso y que se cargue mi biblioteca compartida personalizada (que tiene una función personalizada rand()
):
call (int) dlopen("path_to_library/asdf.so")
Esto colocaría la medida rand()
función dentro de la memoria del proceso. Sin embargo, en este punto, el símbolo rand seguirá apuntando a la función predeterminada rand()
. ¿Hay alguna manera de hacer que gdb apunte el símbolo a la nueva función rand()
, forzando al proceso a usar mi versión?
Debo decir que tampoco estoy autorizado a utilizar los métodos LD_PRELOAD
(linux) ni DYLD_INSERT_LIBRARIES
(mac os x) para esto, ya que permiten la inyección de código solo al principio de la ejecución del programa.
La aplicación que me gustaría reemplazar rand()
, inicia varios hilos y algunos de ellos comienzan nuevos procesos, y me interesa inyectar código en uno de estos nuevos procesos. Como mencioné anteriormente, GDB es excelente para este propósito porque permite la inyección de código en un proceso específico.
son los subprocesos de interés simplemente copias del original bifurcadas, o lo hacen también 'exec()' nuevas imágenes? – llasram
@llasram no son copias ahorquilladas. – karlphillip
Otra pregunta: ¿tiene alguna restricción de versión 'gdb', o podría instalar y usar una versión arbitrariamente reciente? – llasram