0

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

_Address_ -Value_
00ff2254 ff090045
00ff2258 00000002

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

这个对吗?

4

4 回答 4

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 ”机器,大多数现代台式电脑都是。)

于 2010-09-29T08:46:15.610 回答
3

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

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

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

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

换句话说,您可以获取地址、地址+1、地址+2 和地址+3,从每个中获取字节,然后组合成一个 32 位值。

这真的是你的问题吗?

于 2010-09-29T08:56:17.410 回答
1

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

你应该考虑

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

(在 XP 使用的 cpu 架构上)

于 2010-09-29T08:59:07.663 回答
0

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

于 2010-09-29T08:52:33.147 回答