2011-05-23 8 views
5

¿Cómo puedo acceder a los registros de la CPU en la instancia actual depurada? Desde gdb puede llamar, por ejemplo, al printf "0x%x", $eax y al set $eax_b = $eax. ¿Hay alguna forma de hacerlo a través del soporte de python que da gdb? ¿O debería crear una función de python que se pueda llamar como save-reg "eax" $eax que en su mano almacena los registros en una matriz donde quiero que se almacenen?¿Cómo accedo a los registros con python en gdb

Por otro lado, con script gdb también puede set $eax = 1000 por ejemplo, esto también me gustaría hacer desde un script python, en lugar de un script gdb.

Respuesta

8

No creo que la API de Python para BGF ofrece acceso directo a los registros, pero dependiendo de lo que quieres hacer con ella se puede acceder a ella, ya sea mediante la evaluación de la orden GDB con gdb.execute(), o evaluar la "$eax" expresión con gdb.parse_and_eval():

(gdb) p $rbx 
$23 = 140737488348072 
(gdb) python print type(gdb.parse_and_eval("$rbx")), gdb.parse_and_eval("$rbx") 
<type 'gdb.Value'> 140737488348072 

(. Este ejemplo es en el símbolo del BGF, pero el módulo gdb no es diferente de cualquier otro código ejecutado en el BGF)

+0

no creo que está ahí éter, pero esto hará el truco, supongo! ¡Gracias! – DipSwitch

+2

Bueno, 'parse_and_eval' realmente es el caballo de batalla para cualquier código Python incrustado en GDB. No hay otra forma porque la forma en que está ahí ya funciona :) –

+0

@ThomasWouters No lo entiendo: s ¿Cómo explica la respuesta elegida para hacer lo siguiente usando Python? 'set $ eax = 1000' – microMolvi

Cuestiones relacionadas