如何在gdb中使用python访问寄存器

时间:2011-05-23 22:48:21

标签: python gdb

如何访问当前调试实例中的cpu寄存器?从gdb你可以调用例如printf "0x%x", $eaxset $eax_b = $eax还有一种方法可以通过python支持gdb提供吗?或者我应该创建一个python函数,可以像save-reg "eax" $eax那样调用,在他手上将寄存器存储在我希望它们存储的数组中?

另一方面,使用gdb脚本,您也可以set $eax = 1000,例如,我也想在python脚本中执行此操作,而不是使用gdb脚本。

2 个答案:

答案 0 :(得分:8)

我不相信GDB的Python API提供直接访问寄存器,但是根据你想用它做什么,你可以通过用{{评估gdb命令来访问它。 1}},或使用gdb.execute()评估"$eax"表达式:

gdb.parse_and_eval()

(这个例子是在gdb提示符下,但{G} 1}模块在GDB中执行的其他代码中没有任何不同。)

答案 1 :(得分:0)

最近的gdb版本(例如Debian 7.12-6)在read_register类中具有gdb.Frame方法。

(gdb) info register rip
rip            0x7f68656c142d       0x7f68656c142d <__lll_lock_wait+29>
(gdb) python print(gdb.selected_frame().read_register('rip'))
0x7f68656c142d <__lll_lock_wait+29>
(gdb) 

该类没有相应的方法来修改寄存器值。该方法属于该类是有意义的,因为寄存器值在堆栈帧之间有所不同,即gdb在外部帧中显示保存的寄存器值,例如older方法返回的值,内部框架的调用者。