关于gdb和内存地址的问题

逆向工程 数据库
2021-06-15 16:00:46

我正在尝试使用 gdb 来分析 ac 程序,但我有点困惑。 在此处输入图片说明 在上图中,您可以看到我正在尝试分析堆栈。在左边我们有内存地址。因为我使用的是 64 位机器,所以内存地址不应该有 64 位吗?但在图片中每个内存位置都有 32 位。堆栈也从 0x28fed0 开始,第二个地址是 0x28fee0 ,它们之间的地址在哪里。我的意思是 0x28fed1 在哪里?很多年前我学过建筑,但我似乎缺少一些基本的东西。谁能帮我吗?

谢谢

1个回答

堆栈本质上不是 64 位的,它只是一个可以包含任何内容的内存区域。

您特别要求 gdb 以 32 位数量转储内存:

x/32xw

32 是计数(你可以看到你有 8 行,每行 4 列),x是输出格式(十六进制),w是项目大小(“word” - 一个 32 位整数)。

如果要将内存视为 64 位项目的数组,请替换wg("giant word" or a 64-bit integer)。要查看单个字节,请使用b.

至于寻址,每个 32 位项占用四个 8 位字节,因此其中的一行四个加起来为4*4=16,或0x10字节,这就是下一行从 开始的原因0x28fee0地址0x28fed1的字节存在于 0x28fed0 处的 32 位字内。尝试以不同的格式转储内存以了解数据布局。阅读小端