逆コンパイルの進捗レポートを正しく読む
執筆: DecompHub · 更新日 · 日本語
進捗の割合は、何を、どのビルドで、いつ測ったかと併せて初めて意味を持ちます。DecompHubは指標名、測定範囲、出典を値とともに表示します。信頼できる測定が得られていない場合は不明のままです。不明は0%ではありません。
コードの一致と動作の再現は別の目標
マッチング逆コンパイルは、特定のオリジナルビルドと同一の機械語を生成するソースを目指します。コンパイラと設定も重要です。decomp.meのFAQは関数単位のscratchによる比較を説明しています。一つのscratchの結果は、ゲーム全体の進捗ではありません。
互換実装は動作の再現を目指します。ScummVMはゲームの実行ファイルを置き換え、元のゲームデータを利用します。ゲームへの対応状況を、機械語の一致率に読み替えることはできません。移植やハードウェア調査も、一致率がなくても価値があります。
分母を確認する
関数、バイト、ファイル、シンボル、特定済みアセットは異なる単位です。仮の例として1,000関数中900関数が一致すれば、関数数では90%です。しかし残りの関数がコードの半分のバイト数を占めるなら、バイト単位で90%ではありません。これは計算の説明であり、掲載プロジェクトの測定値ではありません。
次を確認してください。
- 指標は一致したコード、逆コンパイル済みコード、特定済みアセットなどのどれか。
- 割合か件数か。件数なら、元の資料に総数があるか。
- 実行ファイル全体、ライブラリ、地域版、プラットフォーム、選択したファイルのどこまでが対象か。
- 測定元のレポートを開けるか。
objdiffはオブジェクトファイルの比較や進捗情報の生成に使われます。ただし、導入されているだけで具体的な分母や設定は分かりません。
バージョンと指標を混ぜない
ある地域版やデバッグ版の完了は、別バージョンの完了を意味しません。Ocarina of Timeは対応バージョンとビルド対象の選択を説明しています。
コードの一致とアセットの特定も別の作業です。コードが一致しても、すべての画像、音声、データ構造が理解されたとは限りません。発行元が合成指標を定義していない限り、勝手に平均しないでください。
日付の種類を区別する
レポートの日付は発行元が示す測定日です。取得日はDecompHubが資料を読んだ日です。今日取得したページに古い測定が載っていることもあります。リポジトリ情報や掲載内容の更新日も、測定の新しさを保証しません。
データ仕様書(英語)に出力フィールドを説明しています。引用するときは、プロジェクト、指標、範囲、出典URL、該当する日付を残しましょう。
不明には、レポートがない、取得できない、範囲を確定できない、収集がまだ届いていない、といった理由があります。100%を超える値、分母の変更、矛盾するバッジは確認が必要です。値を黙って切り詰めたり、不明をゼロやスター数に置き換えたりしないでください。
測定値のあるプロジェクトから出典を開いて比較できます。誤りを見つけたら、掲載ページの報告機能で根拠となる資料を示してください。