我正在学习GDB。当我运行x / 3b命令查看一个3字节的char数组时,我会得到两个不同的输出,具体取决于我是否在数组名称之前加上*。
(gdb) x /3b myThreeCharArray
0x7fffffffe3c0: 4 11 64
(gdb) x /3b *myThreeCharArray
0x400b04 <debug>: 85 72 -119
这两项产出有什么区别?我的理解是x命令将显示由特定变量表示的内存中的字节。所以我想我认为x命令固有地“取消引用”变量名称,但显然情况并非如此。这是怎么回事?
答案 0 :(得分:3)
在gdb
中,x命令获取一个地址并尝试从该内存位置打印值。因此,在第二种情况下,您取消引用myThreeCharArray
并生成gdb
解释为地址的值,并尝试在该“位置”处打印内存。如果将前3个数字转换为十六进制,则可以看到这种情况:
64 is 0x40
11 is 0x0B
04 is 0x04
由于字节顺序,订单被切换。