【发布时间】:2019-05-02 12:54:00
【问题描述】:
在 little endian 机器上,我正在尝试使用 GDB 检查以下变量的内存。
int main()
{
char buffer[4] = "1234";
int value = 0x31323334;
//ascii - "1 2 3 4"
retun 0;
}
我期望看到的是:
对于缓冲区变量 - 0x34333231 对于值变量 - 0x34333231
但是,GDB 检查输出是:
(gdb) show endian
The target endianness is set automatically (currently little endian)
(gdb) x/w &value
0x7fffffffe440: 0x31323334
(gdb) x/w buffer
0x7fffffffe444: 0x34333231
为什么在内存中存储 int 和 char 数组数据有区别? 看起来值变量存储为大端,我错过了什么吗?
【问题讨论】:
-
关于明确给出数组大小的两个附注。 1)
char缓冲区通常用作以空字符结尾的字符串,并且您没有为文字字符串中隐含的终止符留出空间。 2) 编译器使用您指定的“执行字符集”发出文字字符,并且每个“字符”可能并不总是使用一个char。因此,省略文字字符串的显式数组大小。您会看到调试器还显示空终止符,以及您选择的字符编码中的字节。
标签: c gdb endianness