为什么gdb以10为单位递增内存地址

问题描述 投票:0回答:1

我试图理解为什么 gdb 以 10[hex] 为增量显示内存地址。 我已经用

-m32 -z execstack -fno-stack-protector
标志编译了我的 C 程序并关闭了 ASLR。

当我调试程序时,它会显示以下内容

当我尝试查询下一个地址时,它似乎循环通过字节

我无法理解 gdb 的这种行为。

此外,如果我在我的c程序中创建一个

char buf[n]
大小的
n
,我在调试时无法准确计算buf使用的空间,我想知道循环效果是如何发挥作用的。

c gdb
1个回答
1
投票

我认为你对little-endian(32位整数)感到困惑:

在内存中前8个字节是

0x54ffffc5 -> c5 ff ff 54
0x54ffffc5 -> c5 ff ff 54

所以如果你在内存中步进一个字节,你会发现

<skip first byte> ff ff 54 c5 ff ff 54 ...

所以你看到了(作为 32 位整数)

ff ff 54 c5 -> 0xc554ffff
© www.soinside.com 2019 - 2024. All rights reserved.