2011-05-23 69 views
5

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

另一方面,与gdb脚本,你也可以set $eax = 1000例如,这我也想从一个python脚本,而不是一个gdb脚本。

回答

8

我不相信了Python API来GDB提供直接访问寄存器,但是这取决于你想用它做什么,你可以通过与gdb.execute()评估gdb命令访问它,或者评估"$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 

(该例子是在gdb提示,但gdb模块不处于GDB执行的其他代码的任何不同)

+0

我不认为这是在有乙醚,但是这会做我猜的诡计!谢谢! – DipSwitch 2011-05-23 23:42:45

+2

好吧,'parse_and_eval'真的是嵌入到GDB中的任何Python代码的主力。没有任何其他的方式,因为那里的方式已经工作:) – 2011-05-23 23:54:53

+0

@ThomasWouters我没有得到它:s如何选择的答案解释使用python做下面的事情? 'set $ eax = 1000' – microMolvi 2013-07-03 04:45:21

相关问题