使用地址在gdb中打印结构类型的值

4

假设有一个结构体类型变量的地址为:0x61b2e0。 我知道该地址指向类型为s_a的结构体,它的定义如下:

typedef struct {

int n;
char *v;

} s_a;

我如何通过我已知的地址打印此结构字段的值。

谢谢。


5
p *((s_a*)(0x61b2e0)) - meowgoesthedog
2个回答

6

(gdb) p *((s_a *)(<address>))可以帮助您打印由<address>虚拟地址引用的结构体内容,即在您的情况下应为:(gdb) p *((s_a *)(0x61b2e0))


0
为了在不依赖程序数据类型的情况下检查内存,gdb提供了带有以下语法的x命令:
x/nfu addr

这里的/nfu是可选的,其中

n - 根据选项u显示要显示的内存数量。前面的负号会导致读取时地址递减

f - 显示格式

u - 单位大小。例如,“h”对应于半字

对于给定的结构,根据您的机器读取两个整数大小将给出结构内容。第一个整数为n的值,第二个整数为指针地址。因此,在这里进行两个字的读取,

x/2uw 0x61b2e0

虽然这样可以运行,但像@meowgoesthedog提到的那样,在打印中使用转换是更好的答案。 - HardcoreHenry
我也同意。 - Hari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接