Win32年末年始は更新をさぼってて申し訳ありません。前回、相対仮想アドレスについてやりました。重大な抜けがあったので、さらに追記。なんでこれ書かなくていいと思ったんだ、俺よ。戻り値でも可)に対する相対アドレス、差分値です。ベースアドレスに相対仮想アドレスを足すことで、実際のアドレスが求まります。等の関数を使って、ファイルとして読み込んだ場合とでは、セクションの配置が異なります。そのため、ファイルとして読み込んだ場合、(相対)仮想アドレスが指す場所には目的のデータはありません。面倒なので、以降、「仮想アドレス」と言えば相対仮想アドレスを含むことにしますね。回でセクションについてやりました。いうメンバーがあります。ロードされた場合のアドレスです。等で読み込んだ場合のアドレスです。ファイル中では仮想アドレスしかない場合がほとんどです。そのため、ファイルとして読み込んだ場合、仮想アドレスからファイル上のアドレスを計算しなければなりません。つのメンバーを使います。値が、実行時にこのセクションが移動される距離を示しているわけです。そのため、仮想アドレスからこの値を引いてやれば、ファイル上でのアドレスが求まります。目的の仮想アドレスがどのセクションに含まれているかを特定する必要がありますね。言葉で長々説明するより、コードを載せてしまいましょう。つのオーバーロードがあります。最初の方は、単純に相対アドレスを足しているだけです。セクションの移動を考慮していません。目の方が、セクションの移動を考慮したバージョンです。これは、名前からもわかるように、相対仮想アドレス(RVA)から仮想アドレス(VA)を求める関数です。ファイルとして読み込んだ場合には使えません。上記の関数は、これをファイルとして読み込んだ場合にも使えるように拡張したものです。場合、絶対仮想アドレスは単純にベースアドレスに相対仮想アドレスを足して求められます。場合、つまりファイルとして読み込んでいる場合は、目的とする仮想アドレスがどのセクションに含まれているのかを特定し、そのセクションの移動距離の分だけアドレスを減算しています。アドレスによっては、どのセクションにも含まれない場所を指すこともあります。ロードした時の移動はセクションごとに行われますから、セクションに含まれないデータは移動の影響を受けません。このため、ロードした時でもファイルとして読み込んだ時でも、同じ位置にあるということになります。次回以降、相対アドレスから実際のアドレスを求める場合にはこの関数を使っていくことにします。エクスポートについてやりました。今回からデータ本体に踏み込んでいきます。