如何访问当前调试实例中的cpu寄存器?从gdb你可以调用例子printf "0x%x", $eax,set $eax_b = $eax还有一种方法可以通过python支持gdb提供吗?或者我应该创建一个python函数,可以调用,就像save-reg "eax" $eax他手上的寄存器存储在我希望它们存储的数组中?
另一方面,使用gdb脚本set $eax = 1000,例如,我也可以在python脚本中执行此操作,而不是使用gdb脚本.
我不相信GDB的Python API提供了对寄存器的直接访问,但是根据你想用它做什么,你可以通过用它评估gdb命令来访问它gdb.execute(),或者用以下方法评估"$eax"表达式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
Run Code Online (Sandbox Code Playgroud)
(此示例位于gdb提示符下,但该gdb模块与GDB中执行的其他代码没有任何不同.)
最近的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)
Run Code Online (Sandbox Code Playgroud)
该类没有相应的方法来修改寄存器值。该方法属于该类是有意义的,因为寄存器值在堆栈帧之间有所不同,从某种意义上说,gdb显示外部帧中保存的寄存器值,例如方法older(内部帧的调用者)返回的寄存器值。
| 归档时间: |
|
| 查看次数: |
3602 次 |
| 最近记录: |