パッカー/自己解凍 exe タイプのプログラムを作成しようとしていますが、Visual C++ のリンカーによって作成されたセグメントの順序に問題があります。
基本的に、次のように定義された特別な変数を持つスタブ プログラム (ローダー) があります。
#pragma const_seg(".blah")
const char blah[1];
#pragma const_seg()
そして、データを使って何かをしますblah
(例えば、データをアンパックします)。
次に、2 番目のプログラム (パッカー) がローダー プログラムをテンプレートとして使用して、blah
.
基本的に、パッカーはローダー ファイルをコピーし、古い.blah
セクションを新しいデータに置き換えます。新しいファイルが実行されると、ローダーはこの新しいデータで動作します。
exe ファイルを変更するのは難しい作業です。簡単にするため.blah
に、ファイルの最後のセグメントにして、単純にデータをローダーに追加し、PE ヘッダーのいくつかのサイズ フィールドを修正できるようにします。
.blah
ただし、Visual C++ リンカでセグメントの順序を制御して、ローダーをコンパイルするときにファイルの最後に配置する方法がわかりません。
現在、セクションの順序は次のとおりです。
.textbss
.text
.rdata
.data
.idata
.blah
.rsrc
.reloc
ご覧.rsrc
のとおり.reloc
、場所が間違っています。前にそれらが必要.blah
です。
この順序を変更するにはどうすればよいですか?