在python gdb中将地址转换为特定类型

在python gdb中将地址转换为特定类型,python,c++,c,gdb,Python,C++,C,Gdb,我有一个用户定义的结构 struct foo { int bar1; char *name; user_type_t *tba; }foo_t; 在gdb中,我有一个指向foo\u t类型的地址。 e、 g 0xfe83ba56指向内存中类型为foo_t的结构 我可以通过类型转换将该地址转换为foo_t,然后根据需要取消引用它。 (gdb)p(foo_t*)0xfe83ba56 如何在gdb中使用python实现同样的功能?如果我有一个gdb.Value对象,它已经指向

我有一个用户定义的结构

struct foo {
    int bar1;
    char *name;
    user_type_t *tba;
}foo_t;
在gdb中,我有一个指向foo\u t类型的地址。 e、 g 0xfe83ba56指向内存中类型为foo_t的结构

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

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


我查阅了SO“类似问题”部分的许多帖子,但找不到确切的答案。

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

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

我自己也不知道这个问题的答案,但我突然想到,定制类型打印机可能需要完全做到这一点,因此您可以通过查看随附的定制类型打印机(例如libstdc++)来了解这一点?谢谢为了补充您的答案,我首先将原始地址转换为long类型的gdb.Value,然后将其转换为我想要的类型。它工作得很好。tv=gdb.Value(long(0xfffffe001ba43010,16)//它是一个64位地址tf=tv.cast(gdb.lookup\u type('foo\u t').pointer())