使用抗扰度调试器在Windows XP 32位上进行调试时,我在堆栈中看到以下内容:
_Address_ -Value_
00ff2254 ff090045
00ff2258 00000002
我的理解是每个地址位置包含8位。
这是对的吗?
答案 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位宽。