25 :
デフォルトの名無しさん:
既存のEXEファイルにリソースを追加するプログラムを作っています。
コードを書き始めて、単に新規のデータをどこかに挿入したり、最後尾にくっつけたりするだけでは全く実現できないことに気付きました。
複雑な参照関係にあるデータが、インデックス番号ではなくオフセットアドレスを使って参照し合っているからです。
どこかにデータを挿入した場合は、すべてのオフセットアドレスを再構成しなければなりません。
そこで、リソースデータを、追加部分を含めた形で、新たに一から書き出す、という事を考えたのですが、これがかなり大変そうです。
ファイルポインタを激しく動かさなければならないのです。
ツリー部から、ID文字列領域から、リソース本体領域へと激しくジャンプしなければなりません。
その際にまだ書き込んでいないデータのサイズを正確に予測してきちんとファイルポインタ位置を決定しなければなりません。これはかなり複雑な状況ではないか、と思いました。
そこでちょっと考えてみました。
オフセットデータだけが問題であるならば、
ツリー部分にストアされているすべてのオフセットデータ値に対し、
1. データ挿入がなされる位置より前であるなら変更しない
2. データ挿入がなされる位置より後ろなら変更する
という方法でごく簡単にリソースデータを再構築できるのではないか、と。
挿入すべきデータはツリーの構成員の構造体だけで、ID文字列やリソース本体は最後尾にくっつけるだけでよさそうです。
こういう方法でやった人は誰かいるでしょうか? そしてうまくいったでしょうか?