コンパイラの互換性とRTTI

DE DecompilerはDelphi 3~13をネイティブに識別し、C++Builderで作成されたWin32/Win64向けVCLアプリケーションにも対応します。

コンパイラバージョンと復元された型

Delphiのリリースによって、実行ファイルの構造やRTTI(実行時型情報)の形式が異なります。DE Decompilerはコンパイラのバージョンに対応する型情報の知識を使って解析します。コンパイラを識別できても、すべての型、ライブラリ、プロシージャを同じ精度で復元できるとは限りません。

認識されたクラスをその宣言、フォームのプロパティ、およびメソッドコードと比較してください。名前、フィールド型、署名、またはレイアウトに矛盾がある場合は、高レベル表現を信頼する前に、ネイティブな命令とファイルバイトを使用して調査を行ってください。

コンパイラ識別とシグネチャデータベース

C++BuilderとFree PascalをDelphiとは区別して識別します。互換シグネチャデータベースの使用時や保存済みプロジェクトの読み込み後も、入力のコンパイラ情報を保持します。長いコンパイラ名やバージョン範囲はメイン画面のラベル内に収まり、詳細はツールチップで確認できます。

入力ファイルのコンパイラは、コード解析に選択したシグネチャデータベースとは独立して識別されます。得られた情報だけでバージョンを区別できない場合は、表示にもその曖昧さが残ります。

商用エディションでは、deディレクトリからシグネチャデータベースを選択します。まずコンパイラのバージョンが完全に一致するものを探し、なければ同じビット数で最も近い新しいバージョン、それもなければ最も近い古いバージョンを選択します。ファイル名はvcl<version>.binまたはvcl<version> x64.binです。

アスタリスク(*)は、代替データベースを使用している場合、またはデータベースの一致を確実に確認できない場合に表示されます。コンパイラ名にポインタを重ねると、選択されたBINファイル名を確認できます。この印はデータベースの対応関係を示すもので、入力ファイルを解析できないことを意味するものではありません。シグネチャデータベースは商用エディションで利用できます。

C++Builderで作成されたアプリケーション

DE Decompilerは、C++Builderで作成されたWin32/Win64向けVCLアプリケーションに対応します。フォームの復元と表示、ユニット・クラス・関数の解析、イベントハンドラへの移動に加え、同じワークスペースでその他の解析・出力ツールも利用できます。

C++Builder固有のライブラリに対応するRTTI知識ベースは、まだ用意されていません。共通のVCLの認識範囲に含まれない関数や、識別できないオブジェクトのプロパティ・メソッドは、ライブラリ内の名前を付けずに表示される場合があります。このため、C++Builderのコードの復元品質は、Delphiで記述されたプログラムより明らかに低くなります。 この制約はコードの復元精度とライブラリ内の名前の識別に関するものです。フォーム表示や構造解析など、その他の機能はDelphiで記述されたプログラムと同じエディションの条件で利用できます。

C++BuilderのコードはDelphi風のPascalとして復元し、PAS/DFM形式で出力します。元のC++ソースには戻しません。他のネイティブコード復元と同様、IDEで利用する前に、推定された型、生成された名前、逆コンパイルの不正確な箇所を手作業で確認・修正してください。

プライベート関数

逆コンパイラは、各ユニット内のプライベート関数をヒューリスティックに特定しようとします。この発見は認識されたパブリックエントリポイント以外のコードを明らかにするのに役立ちますが、すべての関数境界またはユニット関連が復元されたことを意味するものではありません。

VCLの対応範囲

ビジュアルフォームのワークフローは、Win32 および Win64 の入力ファイルから復元された VCL フォームとコントロールに適用されます。

互換性問題の報告

DE Decompiler は継続的に開発されており、コンパイラのサポート、型認識、コード再構築が洗練されるにつれて、逆コンパイルの品質も向上します。

特定の課題について報告したい場合は、問題を再現できるバイナリファイルを送信し、それが発生するフォームまたは関数を特定してください。その名前と、関数の場合は利用可能なアドレスを、DE Decompiler のビルド番号およびエラーの説明と共に含めてください。連絡先詳細については テクニカルサポート を参照してください。