私はバイナリファイル形式で作業しています。説明が難しいので、できるだけシンプルにしようとします。ファイル内のデータ参照/ポインタの処理?
ファイルに書き込まれるデータ構造には、 'ポインタ'(つまり、ファイル内の別の場所にある文字列へのポインタ、またはファイル内の別の構造体へのポインタ)が含まれている可能性があります。ポインタ 'は' offset 'になります。つまり、構造体にはファイル内の文字列のOFFSETが入ります)。
簡単な例:
struct ExampleStruct {
public string Text;
public int Number;
};
「テキスト」の文字列メンバーは、ファイルの先頭に書き込まれ、シリアル化された構造体には含まれません。
ので、基本的に、構造体は、ファイルに次のようになります。
struct ExampleStruct {
public uint TextLocationOffset;
public int Number;
};
を...「TextLocationOffsetは、」文字列「テキスト」がファイル内に配置されている場所へのオフセットです。
私はそれを持ってから、 "再配置テーブル"を必要とします - 本質的にファイル内のデータポインタを指すダブルポインタのリストです。私は私のファイルにExampleStructことを書いた、そしてそれはポインタ '(TextLocationOffset)が含まれているため(?理にかなっているん)
をので、私の「再配置テーブルには、」で構成されます:
public uint TextLocationOffset_LocationOffset;
。 .. 'TextLocationOffset_LocationOffset'には、ファイル内の 'TextLocationOffset'のオフセットが含まれます。
すべて意味がありますか?私は可能な限り簡素化しようとしました。
私の問題は、どのように私はすべてのポインタ/ダブルポインタ/再配置のC#で追跡すると思いますか?データは常に私が持っているbyte []配列に追加されているので、オフセットは絶えず変化しています。
私は '再配置'されているもののダブルポインタを得ることができるので、これは簡単です。次に、元の 'ポインタ'(私の例では 'TextLocationOffset')を正しいオフセットに変更できます。私は 'TextLocationOffset'値の位置を見つけて、それを私の再配置テーブルに追加することができます。
申し訳ありませんが、それは意味をなさない。私は数週間前にこれを聞いてみましたが、返事はありませんでした。
私はちょうど私のコードのこれらのすべてを追跡する方法が必要...任意のヒント?
P.S.より徹底した例が必要な場合は、私が提供してくれることを喜んでお勧めします:)
[バイナリファイル形式 - データ '再配置'の可能な複製?](http:// stackoverflow。com/questions/10183384/binary-file-format-data-relocations) – user7116