0

プロセスメモリの読み方についてもっと学ぼうとしています。そこで、Firefox プロセスの「メモリ全体」を WinHex で開いたところ、オフセット 10000 から始まる次の 16 進値が表示されました。

00 00 00 00 00 00 00 00 EC 6B 3F 80 0C 6D 00 01 EE FF EE FF 01 00 00 00

私の質問は、人間がこれ以上の知識なしにこれを解釈することは可能ですか? これらはポインターですか、それとも値ですか? エンディアンなどとは別に、プロセスメモリに関して、異なるコンパイラで作成された異なるプログラムに共通するものはありますか? なぜ多くのゼロで始まるのですか? スペースの使用を開始するのは非常に奇妙な方法ではありませんか?

4

1 に答える 1

3

明らかに、あなたは「さらなる知識なしに」何もすることができません。しかし、それがWindowsであるという事実から、私たちはすでに多くのことを知っています。手始めに、実行可能ファイルが独自のメモリビューを取得し、その仮想ビューで実行可能ファイルが優先される開始アドレスにロードされることを知っています(EXEのPEヘッダーに記載されています)。

0x00010000からの開始は、MS-DOS(はい、その16ビットOS)との互換性があります。最初の64KBは予約されており、有効なアドレスになることはありません。0x00400000(4MB)までのページはOS用に予約されており、一般にOSのバージョンによって異なります。

その範囲の一般的なデータ構造は、プロセス環境ブロックです。WinDBGツールとMicrosoftSymbolServerを使用すると、プロセス環境ブロックが実際にオフセット0x10000にあるかどうか、およびその内容が何を意味するかを把握できます。

于 2011-04-29T13:26:08.927 に答える