【问题标题】:Convert an address to a specific type in python gdb在python gdb中将地址转换为特定类型
【发布时间】:2016-10-27 07:28:21
【问题描述】:

我有一个用户定义的结构。

struct foo {
    int bar1;
    char *name;
    user_type_t *tba;
}foo_t;

在 gdb 中,我有一个指向类型 foo_t 的地址。 例如 0xfe83ba56 指向内存中 foo_t 类型的结构。

我可以通过类型转换将该地址转换为 foo_t,然后我可以在需要时取消引用它。 (gdb) p (foo_t *)0xfe83ba56

如何在 gdb 中使用 python?如果我有一个已经指向 foo_t 类型对象的 gdb.Value 对象,那么我可以找到它的地址。但在这里,我试图将原始地址转换为 gdb.Value 对象。

我查看了https://sourceware.org/gdb/onlinedocs/gdb/Values-From-Inferior.html#Values-From-Inferior 和 SO 的“类似问题”部分的许多帖子,但找不到确切答案。

【问题讨论】:

标签: python c++ c gdb


【解决方案1】:

要转换,请使用Value.cast 方法。比如:

t = gdb.lookup_type('foo_t').pointer()
value = value.cast(t)

【讨论】:

  • 谢谢。只是为了补充您的答案,我首先将原始地址转换为长类型的 gdb.Value,然后将其转换为我想要的类型。它工作得很好。 tv = gdb.Value(long(0xfffffe001ba43010, 16) // 这是一个 64 位地址 tf = tv.cast( gdb.lookup_type('foo_t').pointer())
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
相关资源
最近更新 更多