Linux では、リンク時にセクションの任意の仮想アドレスを指定できます。
ld -Ttext 0x10000000 -Tdata 0x20000000 foo.o -o foo
しかし、Windows の link.exe にはそのようなオプションがありません。
どうにかしてPEセクションの開始アドレスを指定することはできますか?
Linux では、リンク時にセクションの任意の仮想アドレスを指定できます。
ld -Ttext 0x10000000 -Tdata 0x20000000 foo.o -o foo
しかし、Windows の link.exe にはそのようなオプションがありません。
どうにかしてPEセクションの開始アドレスを指定することはできますか?
MinGW ld はセクションを任意のアドレスに置くことができます。Dumpbin と逆アセンブラは問題なく処理できます。
しかし、Windows はデフォルトのアドレス以外は受け付けないようです: 別の値に設定しようとすると、Windows は「有効な Win32 アプリケーションではありません」と言うでしょう。
ベース アドレスは 0x400000 または 0x1000000 でなければなりません。
また、.text セクションは 0x401000 または 0x1001000 でなければなりません。
また、セクション間のギャップは許可されていないようです。.data セクションを 0x402000 ではなく 0x403000 に配置しようとすると、Windows はそれをロードできません...
(私が間違っているか、または mingw ld にバグがあります...)