データとして読み込む方法と、実行するためにロードする方法です。前者はもちろんファイルと同じデータが読み込まれますが、後者の場合、セクションが配置される位置がファイルと異なります(ヘッダーは同じです)。倍数のアドレスから始まります。倍数のアドレスに配置されます。データとして読み込む方法には、以下のようなものがあります。実行のためにロードする方法には、以下のようなものがあります。関数ただし、いずれにも例外があります。オブジェクトが作られます。フラグを付けると、ファイルと同じレイアウトでロードされます。アドレスとして使用する場合には、最下位ビットをマスクする必要があります。ファイルがどちらの方法で読み込まれているのかを判断する方法は、おそらくありません。ファイルとして読み込まれています。値を渡すと、ファイル名が取得できます。これは考えてみれば当然の話です。関数などで読み込むと、メモリ上にファイルの内容のコピーが作られます。イメージが重複して読み込まれてしまい、メモリを無駄にしてしまいます。ファイルであれば、同じファイルを多くのプロセスで読み込んでも、実際に物理メモリは消費しませんから、メモリの節約になります。レイアウトは、ファイルの時とは異なります。内部的には、セクションごとに個別にメモリにマップしているのでしょう。フラグに相当するものがあります。ファイルを書き換えると、元になるファイル自体も書き換わってしまいます。ファイルの内容はロードしても変わりません。いう機能を使って実現されています。ファイルを書き換えようとした時に初めて、その領域のコピーをメモリ上に作り、そのコピーを書き換えるという手法です。ファイルを書き換えることなく、また、読み取りしかしない多くの領域はメモリ上にコピーを作らないので、物理メモリを節約することができるわけです。Address:RVA)という言葉を積極的に使っていきます。アドレスからの相対アドレスという意味です。ファイル内では各種アドレスは基本的に相対アドレスで管理されています。Address:VA)と呼びます。イメージには使えないため注意が必要です。エクスポートについてやりました。今回からデータ本体に踏み込んでいきます。相対仮想アドレス年末年始は更新をさぼってて申し訳ありません。