位在内存地址中

时间:2010-09-29 08:40:38

标签: memory assembly stack memory-address

使用抗扰度调试器在Windows XP 32位上进行调试时,我在堆栈中看到以下内容:

_Address_ -Value_
00ff2254 ff090045
00ff2258 00000002

我的理解是每个地址位置包含8位。

这是对的吗?

4 个答案:

答案 0 :(得分:4)

如果我正确理解你的问题,答案是肯定的,每个单独的内存位置包含8位。

调试器一次向您显示4个字节(32位),以使显示更紧凑(并且因为许多数据类型占用32位,因此查看32位值通常很有用)。这就是为什么左栏中的地址相隔4个位置。

如果调试器一次显示一个字节(8位),显示将如下所示:

_Address_ -Value_
00ff2254 45
00ff2255 00
00ff2256 09
00ff2257 ff
00ff2258 02
00ff2259 00
00ff225a 00
00ff225b 00

(假设您使用的是“little-endian”机器,这是大多数现代台式机所用的。)

答案 1 :(得分:3)

我认为你的问题的主要问题是你要求一件事,但我发现了潜伏在阴影中的另一个问题。

首先,计算机内存中的可寻址实体被组织为字节,每个字节为8位,所以是的,每个地址可以说是指8位或一个字节。

但是,您可以轻松地将更多字节组合在一起,以形成更大,更复杂的数据结构。

如果您的问题确实是“为什么我看到一个8位数值作为我的堆栈转储中的地址的内容”,那么原因是它转储了32位(4字节)值。

换句话说,您可以获取地址,地址+ 1,地址+ 2和地址+ 3,从每个地址中获取字节,并合并为32位值。

这真的是你的问题吗?

答案 2 :(得分:1)

要完成RH的答案,您可能会惊讶于给定地址有这么多数字。

你应该考虑

Address  Byte (8 bits)
00ff2254 45
00ff2255 00
00ff2256 09
00ff2257 ff
00ff2258 02
... 

(在XP使用的cpu架构上)

答案 3 :(得分:0)

内存位置是指内存的位置,每个连续的内存位置是指内存中的下一个字节。因此,您只能在一个字节边界上寻址内存,并且每个人都应该知道一个字节是8位宽。