【问题标题】:How to get an object from memory address in GDB by python如何通过python从GDB中的内存地址获取对象
【发布时间】:2014-08-26 21:18:54
【问题描述】:

我有一个核心文件和二进制文件(C++)。问题是,在使用gdb分析核心文件时,如果我试图打印一个指针,它会打印出内存地址。一旦我尝试打印该指针的原始上下文,它会说:

如果没有要调试的进程,您将无法做到这一点。

这是一个例子:

(gdb) p objPtr
(gdb) $1 = {px = 0x12345678}
(gdb) p *objPtr
(gdb) You can't do this without a process to debug.

事实上,这是有道理的,因为核心文件不是那个二进制文件的进程。但是核心文件应该存储二进制崩溃时的状态,我认为应该有一种方法可以从指针中获取原始上下文。

我对编写 Python 脚本来处理这个问题进行了一些研究。但是首先,如果我们不能在 gdb 中这样做p *ptr,我的 Python 脚本如何从该内存地址获取对象?

任何参考资料或 github 项目都会有所帮助。

更新:

我发现我可以做到:

(gdb) p *ptr.px

解决我上面的问题。

但现在我的问题变成了如何在 Python 脚本中获取 .px 的东西,如果我想编写一个脚本来帮助在 GDB 中进行调试。

【问题讨论】:

    标签: python c++ memory gdb core-file


    【解决方案1】:

    其实自己找答案。 由于 objPtr 在我的示例中是一个指针,因此调用 *objPtr 之类的东西被认为是调用该指针的函数/方法。正确的方法是p *objPtr.px

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多