为什么 GDB 检查结果会因我是否事先检查过字符串而有所不同?

Why GDB examination results differ depending on whether I examined a string beforehand?

我不明白为什么 GDB 在检查 RAM 地址时返回不同的结果,这取决于我是否事先检查了我的字符串:

进一步检查地址表明 0x401111 本质上是 0x401110 移位 1 个字节,依此类推。 我想知道哪个是准确的,0x401110 实际上指的是 4 个字节还是一个字节。 Both results + x86_64 Assembly source code

help x 说:

Defaults for format and size letters are those previously used.

显然 s 格式将大小隐式设置为字节大小。

您可以通过添加 bw 大小说明符来手动指定大小:

x/xw 0x401110(32 位)

x/xb 0x401110(8 位)