それをいくらか洞察に満ちたものにするために、いくつかの背景情報:
DCUは多かれ少なかれ次の部分の組み合わせです
- オブジェクトコード。これは、CまたはC ++が生成するものと同じように、通常は静的にコンパイルされた再配置可能なオブジェクトコードです。
- デバッグコードを含む(私が間違っていない場合はTopviewバリアント)
- 何らかの形式のプリコンパイル済みヘッダー(インターフェイス)。
- 一部の表現における特殊化されていないジェネリック(*)
- クロスユニットのインライン化できないコード(ツリー表現?)
これら4つすべてが別々のセクションなのか、インターリーブされているのかはわかりません。私の推測では、1 + 2が組み合わされ(リンカーでより一般的なルーチンが可能になるため)、3 + 4+5とおそらく他のメタデータを含む「残り」があります。
ヘッダーは、システムユニットとOS固有のユニットのOS固有のタイプとシンボルに依存する可能性があるため、理論上でも、最も自己完結型のユニットのみがクロスプラットフォームになります。おそらく、わざわざ努力する価値はありません。
逆コンパイルに関する限り、一般的な逆コンパイルの問題とほとんど同じですが、いくつかの工夫があります。
- まだ最終的にリンクされていない(オブジェクト)コードは、少し簡単に逆コンパイルできます
- デバッグコードが添付されたコードは、少し簡単に逆コンパイルできます。
- ただし、DCU形式はバージョンに依存し、独自仕様です。
- 逆コンパイルプロセス全体は、コンパイラとバージョンに大きく依存します。
要するに、それはおそらく以前のDelphiコンパイラやランダムC++コンパイラの静的lib+ヘッダーファイルよりも少し簡単ではありません。