为什么 GDB 检查结果会因我是否事先检查过字符串而有所不同?
Why GDB examination results differ depending on whether I examined a string beforehand?
我不明白为什么 GDB 在检查 RAM 地址时返回不同的结果,这取决于我是否事先检查了我的字符串:
- 如果我检查我的字符串(0x404028 地址中的“hello, world”),当我从我的主函数检查地址时,GDB 返回一个字节(x/x 0x401110 = 0xb8)
- 如果我在没有事先检查字符串的情况下检查我的主要功能,GDB 将返回 4 个字节 (x/x 0x401110 = 0x000001b8)
进一步检查地址表明 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
格式将大小隐式设置为字节大小。
您可以通过添加 b
或 w
大小说明符来手动指定大小:
x/xw 0x401110
(32 位)
x/xb 0x401110
(8 位)
我不明白为什么 GDB 在检查 RAM 地址时返回不同的结果,这取决于我是否事先检查了我的字符串:
- 如果我检查我的字符串(0x404028 地址中的“hello, world”),当我从我的主函数检查地址时,GDB 返回一个字节(x/x 0x401110 = 0xb8)
- 如果我在没有事先检查字符串的情况下检查我的主要功能,GDB 将返回 4 个字节 (x/x 0x401110 = 0x000001b8)
进一步检查地址表明 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
格式将大小隐式设置为字节大小。
您可以通过添加 b
或 w
大小说明符来手动指定大小:
x/xw 0x401110
(32 位)
x/xb 0x401110
(8 位)