代码:
int a;
int b;
char test[011];
a = 0x41414141;
b = 0x42424242;
gdb 输出
(gdb) x/s &a
0x7fffffffde1c: "AAAA@\336\377\377\377\177"
(gdb) x/s &b
0x7fffffffde18: "BBBBAAAA@\336\377\377\377\177"
在代码中,a 初始化为 AAAA,b 初始化为 BBBB。 我需要了解以下内容。
- 为什么 b 的位置有 BBBBAAAA 而不是它应该有的 BBBB?
- @\336\377\377\377\177 表示什么?
最佳答案
Why the location of
b
has BBBBAAAA instead of BBBB it is supposed to have?
事实并非如此。 b 的位置为 0x42424242(当解释为 int
时)。但是通过运行 x/s &b
(与 print b
相对),您告诉 gdb 从 b
的位置开始打印一个字符串,而不是打印存储在那里的 int
。
碰巧存储在 b
位置的字节在解释为 ASCII 时看起来像“BBBB”,而在其之后的字节在解释为 ASCII 时看起来像“AAAA@”,然后还有一些字节不是可打印字符,因此 gdb 将它们打印为转义码,然后是一个 0 字节(表示字符串的结尾)。
What does the @\336\377\377\377\177 signify?
@ 是字符@。\336、\337 和\177 是转义码 - @ 后面的字节不是可显示字符,因此 gdb 将它们打印为八进制转义码(使用 C 语法)。
关于c - 我正在使用 gdb 调试 C 程序,当我检查变量的值时得到以下输出。它意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38893912/