私は実行可能ローダーについていくつかの調査を行ってきましたが、特定の仮想アドレスでロードする必要がある (つまり、再配置レコードを持たない) 実行可能ファイルをどのように処理するかが、私を混乱させます。
UPX にはこれを行う機能があることは知っていますが、これが UPX ソースでどのように処理されるかはわかりません (どのコードがロードを担当しているのか正確にはわかりません...)
ローダーを作成しましたが、ロード先の仮想アドレスが問題にならないように、アプリケーションに再配置レコードが必要です。
UPX のスタブのベース アドレスは 0x400000 で、ベース アドレスが 0x400000 の実行可能ファイルをロードする場合は問題ありません。OSは現在のプロセスのベースアドレスに仮想メモリを割り当てる要求を拒否するため、これはどのように可能ですか(少なくとも私にはこのように思われます)
これを達成するために必要と思われる機能である VirtualAlloc の UPX ソースを検索してみましたが、UPX ソースで 1 回だけ発生します ( https://github.com/upx/upx/search?utf8=% E2%9C%93&q=VirtualAlloc ) が一見無関係なコードに含まれているため、非常に混乱しています。