イミュニティデバッガーを使用して Windows XP 32 ビットでデバッグしているときに、スタックに次のように表示されます。
_Address_ -Value_
00ff2254 ff090045
00ff2258 00000002
私の理解では、すべてのアドレス位置には 8 ビットが含まれています。
これは正しいです?
イミュニティデバッガーを使用して Windows XP 32 ビットでデバッグしているときに、スタックに次のように表示されます。
_Address_ -Value_
00ff2254 ff090045
00ff2258 00000002
私の理解では、すべてのアドレス位置には 8 ビットが含まれています。
これは正しいです?
あなたの質問を正しく理解していれば、答えはイエスです。個々のメモリ位置にはそれぞれ 8 ビットが含まれています。
デバッガーは、表示をよりコンパクトにするために、一度に 4 バイト (32 ビット) を表示しています (また、多くのデータ型が 32 ビットを使用するため、32 ビット値を表示すると便利な場合がよくあります)。そのため、左の列の住所は 4 か所離れています。
デバッガーが一度に 1 バイト (8 ビット) を表示した場合、表示は次のようになります。
_Address_ -Value_
00ff2254 45
00ff2255 00
00ff2256 09
00ff2257 ff
00ff2258 02
00ff2259 00
00ff225a 00
00ff225b 00
(最近のほとんどのデスクトップ PC がそうであるように、「リトルエンディアン」マシンを使用していると仮定します。)
あなたの質問の主な問題は、あなたが 1 つのことを求めていることだと思いますが、その影に別の質問が潜んでいることがわかりました。
まず第一に、コンピュータのメモリ内のアドレス指定可能なエンティティは、それぞれ 8 ビットのバイトとして編成されているため、各アドレスは 8 ビットまたは 1 バイトを参照していると言えます。
ただし、より多くのバイトを簡単にグループ化して、より大きく複雑なデータ構造を形成することができます。
あなたの質問が本当に「スタック ダンプのアドレスの内容として 8 桁の値が表示されるのはなぜですか」である場合、その理由は 32 ビット (4 バイト) の値をダンプすることです。
つまり、アドレス、アドレス + 1、アドレス + 2、およびアドレス + 3 を取得し、それぞれからバイトを取得して、32 ビット値に組み合わせることができます。
それは本当にあなたの質問ですか?
RH の答えを完成させるために、与えられたアドレスに対して非常に多くの数字があることに驚くかもしれません。
検討する必要があります
Address Byte (8 bits)
00ff2254 45
00ff2255 00
00ff2256 09
00ff2257 ff
00ff2258 02
...
(XP で使用される CPU アーキテクチャ上)
メモリ位置はメモリの位置を参照し、連続する各メモリ位置はメモリ内の次のバイトを参照します。したがって、1 バイト境界でのみメモリをアドレス指定でき、1 バイトが 8 ビット幅であることを誰もが知っている必要があります。