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

标签 python gdb

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

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

最佳答案

我不相信 GDB 的 Python API 提供对寄存器的直接访问,但是根据你想用它做什么,你可以通过评估带有 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 中执行的其他代码没有任何不同。)

关于python - 我如何在 gdb 中使用 python 访问寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6103887/

相关文章:

python - CPLEX 中的背包求解总结

linux - 地址0x8048080的意义

linux - 无法访问 GDB 中 [vvar] 内存区域的内容?

c++ - GDB 调试器问题 - 没有命名的源文件

python - 在beautifulsoup/python中查找带有特定文本的标签索引

python - 我如何开始处理与网站事件相关的电子邮件?

Python 子进程 stdin=subprocess.PIPE 和 unicode

c++ - 在 DDD 中显示 STL 类

c - 当我在 GDB 中运行程序时,GDB 是如何显示程序的虚拟地址的?

python - ttk.Entry.select_range() 适用于 Button,但不适用于 python/tkinter 中的 ttk.Button?