GDB 是否支持将内容显示为指针类型的值?
Does GDB support displaying contents as pointer typed values?
Windbg 有一个 dpp
命令,它将内存中的值解释为指针并打印出指针指向的内容。如下所示:
我的问题是,GDB 是否有类似的功能?
在 gdb 命令行上,您可以将地址转换为指针值。
(gdb) list
1 #include <stdio.h>
2
3 char * m = "this is a test\n";
4
5 main()
6 {
7 printf("%s",m);
8 }
(gdb) b 7
Breakpoint 1 at 0x400531: file example.c, line 7.
(gdb) r
Starting program: /tmp/example
Breakpoint 1, main () at example.c:7
7 printf("%s",m);
(gdb) p m
= 0x4005d4 "this is a test\n"
(gdb) p *(char*)0x4005d4
= 116 't'
(gdb) p *(int*)0x4005d4
= 1936287860
(gdb) p *(double**)0x4005d4
= (double *) 0x2073692073696874
最后两个当然是垃圾,因为值是 char *。
转储命令对于查看十六进制值也很有用。
(gdb) x/20c m
0x4005d4: 116 't' 104 'h' 105 'i' 115 's' 32 ' ' 105 'i' 115 's' 32 ' '
0x4005dc: 97 'a' 32 ' ' 116 't' 101 'e' 115 's' 116 't' 10 '\n' 0 '[=11=]0'
0x4005e4: 37 '%' 115 's' 0 '[=11=]0' 0 '[=11=]0'
Windbg 有一个 dpp
命令,它将内存中的值解释为指针并打印出指针指向的内容。如下所示:
我的问题是,GDB 是否有类似的功能?
在 gdb 命令行上,您可以将地址转换为指针值。
(gdb) list
1 #include <stdio.h>
2
3 char * m = "this is a test\n";
4
5 main()
6 {
7 printf("%s",m);
8 }
(gdb) b 7
Breakpoint 1 at 0x400531: file example.c, line 7.
(gdb) r
Starting program: /tmp/example
Breakpoint 1, main () at example.c:7
7 printf("%s",m);
(gdb) p m
= 0x4005d4 "this is a test\n"
(gdb) p *(char*)0x4005d4
= 116 't'
(gdb) p *(int*)0x4005d4
= 1936287860
(gdb) p *(double**)0x4005d4
= (double *) 0x2073692073696874
最后两个当然是垃圾,因为值是 char *。
转储命令对于查看十六进制值也很有用。
(gdb) x/20c m
0x4005d4: 116 't' 104 'h' 105 'i' 115 's' 32 ' ' 105 'i' 115 's' 32 ' '
0x4005dc: 97 'a' 32 ' ' 116 't' 101 'e' 115 's' 116 't' 10 '\n' 0 '[=11=]0'
0x4005e4: 37 '%' 115 's' 0 '[=11=]0' 0 '[=11=]0'