2012-03-01 8 views
1

バイナリ実行可能ファイルをメモリにロードするときには、16進エディタやアセンブラコードのシンボルで逆アセンブルしたり、見ていることもあります。これらは常に0x804のようなもので始まります。私はプログラムのメモリセクションを想定しています。しかし、私の質問は、これらのアドレスは、プログラムの開始からのオフセットではないので、バイナリはどのようにメモリにロードされるのかを知っていますか?バイナリ実行ファイルはどのようにメモリ内の位置を知っていますか?

+0

あなたが何を求めているのかは明確ではありません。実行中の実行ファイルがメモリ上の自分の場所をどのように決定するかを尋ねていますか?もしそうなら、なぜそれを知る必要がありますか?また、あなたが考えている特定のプラットフォームがありますか?このドキュメントの[loaders](http://www.iecc.com/linker/linker08.html)に関するセクションを参照してください。 –

+0

私は、プログラムのアドレスがどのように正確であるかをもっと尋ねています。プログラムが常に同じ場所にロードされるとは限らないので、どのようにアドレスが正しいものを指しているのでしょうか。 – Jumhyn

+0

はいできます。 http://en.wikipedia.org/wiki/Paging –

答えて

0

実行可能ファイルには、通常、フィールドの1つがロードアドレスであるヘッダーがあります。

+0

しかし、ファイルは常に*同一の場所に読み込むことはできません。 – Jumhyn

+0

Windowsでは、EXEのデフォルトのロード場所は0x400000です。これは、常に(他の)固定場所を持つプリロードされたシステムDLLを除いて、常にプロセスでロードする最初のものであるEXEで使用できます。 –

+0

@Jumhyn同じ場所に実行ファイルがロードされるのをなぜ表示できますか?あなたは図書館に適しています。その場所は他の何かのために使われているかもしれません。しかし、実行可能ファイルの場合は、新しい実行可能ファイル用の新しいアドレス空間を作成しているので、すべてがフリーで始まります。 –