繁体   English   中英

如何通过python从GDB中的内存地址获取对象

[英]How to get an object from memory address in GDB by python

我有一个核心文件,我有二进制文件(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

解决上面的问题。

但是现在,我的问题变成了如果我希望编写一个有助于在GDB中进行调试的脚本,那么如何在Python脚本中获取.px内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM