多くの場合、データは、ドキュメントがほとんどまたはまったくないプログラム固有のバイナリファイルに保存されます。私たちの分野の典型的な例は、機器からのデータですが、問題は一般的なものだと思います。データを理解して解釈しようとするためにどのような方法がありますか?
いくつかの境界を設定します。ファイルは暗号化されておらず、DRMもありません。ファイルのタイプと形式は、プログラムの作成者に固有です(つまり、IDが失われた* .tarなどの「標準ファイル」ではありません)。(おそらく)意図的な難読化はありませんが、スペースを節約するためのアマチュアの努力があるかもしれません。データが何であるかについての一般的な知識があり、フィールドと配列の一部(おそらくすべてではない)を認識できると想定できます。
データの大部分が数値であり、スカラーと配列(おそらく1次元と2次元、場合によっては不規則または三角形)であると想定します。いくつかの文字列、おそらく人の名前、サイト、日付、そしておそらくいくつかのキーワードもあります。バイナリファイルを読み取るプログラムにコードがありますが、ソースまたはアセンブラにアクセスできません。例として、VAX Fortranプログラム、初期のUnix、またはWindowsによってOLEオブジェクトとして記述されている場合があります。数値はビッグエンディアンまたはリトルエンディアン(最初は不明)の場合がありますが、おそらく一貫しています。マシン(Crayなど)によってバージョンが異なる場合があります。
かなり大きなファイルのコーパスがあると想定できます。たとえば、数百になります。
2つのシナリオを想定できます。
- さまざまな入力を使用してプログラムを再実行できるため、実験を行うことができます。
- プログラムを再実行することはできません。固定されたドキュメントのセットがあります。これは、未知の言語(線文字Bなど)での歴史的文書のデコードと穏やかに類似しています。
部分的な解決策は受け入れられるかもしれません-すなわち、生きている人が今理解していないいくつかの分野があるかもしれませんが、他のほとんどは解釈可能です。
私はオープンソースのアプローチにのみ興味があります。
更新関連するSOの質問(互換性の目的でバイナリファイル形式をリバースエンジニアリングする方法)がありますが、強調は多少異なります。
@brianeggeからアドレス(1)への巧妙な提案を更新します。プログラム内のすべてのwrite()および同様の呼び出しをダンプするためにtruss
(またはおそらくLinuxで)使用します。strace
これにより、少なくともディスクに書き込まれたレコードのコレクションが可能になります。