如何解决如何在gdb中使用python访问寄存器
| 如何访问当前调试实例中的cpu寄存器?从gdb中,您可以调用例如printf \"0x%x\",$eax
和set $eax_b = $eax
,还有一种方法可以通过gdb提供的python支持来做到这一点?还是我应该创建一个可以调用save-reg \"eax\" $eax
之类的python函数,将其存储在我希望存储它们的数组中?
另一方面,例如,对于gdb脚本,您也可以按3,这也是我想从python脚本而不是gdb脚本中完成的。
解决方法
我不相信GDB的Python API可以直接访问寄存器,但是根据您要使用的功能,您可以通过使用
gdb.execute()
评估gdb命令或通过gdb.parse_and_eval()
评估\"$eax\"
表达式来访问它:
(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中执行的其他代码没有任何不同。)
,gdb
的最新版本(例如Debian 7.12-6)在gdb.Frame
类中具有read_register
方法。
(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)
该类没有相应的方法来修改寄存器值。该方法属于该类是有意义的,因为寄存器值在堆栈帧之间有所不同,即in8ѭ在外部帧中显示已保存的寄存器值,例如older
方法返回的值,即内部帧的调用者。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。