ファイル形式の仕様を文書化する方法[終了]


12

プロジェクトでは、いくつかの古いゲームや関連ソフトウェアのさまざまな種類のファイル(構成ファイル、保存、リソースアーカイブなど)を扱う必要があります。これらの大部分はまだ文書化されておらず、それらを操作するためのツールも存在しないため、フォーマットをリバースエンジニアリングして、それらを処理するための独自のライブラリを構築する必要があります。

たいへん需要が多いとは思いませんが、成果を公表したいと思います。ファイル形式を文書化するための承認された標準はありますか?見回すと、いくつかのスタイルが使用されています。.ZIPファイル形式の仕様など、非常に冗長なスタイルがあります。XentaxWikiにあるような他のものはもっと簡潔です-それらのいくつかは読みにくいと思います。私が個人的に最も気に入っているのは、PlayStation 2メモリカードファイルシステムの説明です。これには、詳細な説明テキストとオフセットなどのいくつかの「メモリマップ」の両方が含まれます。これは、私のユースケースに最もよく一致します。フォーマットによって多少異なりますが、私が従おうとするいくつかの一般原則があるはずです。

編集:私が何をしたいのかよく説明していなかったようです。例を作ってみましょう。

構成を「バイナリ」ファイルに保存するいくつかの古いソフトウェアがあるかもしれません-一連のビットフィールド、整数、文字列、そしてすべてが結合されてプログラムによって理解されるわけではありませんが、人間が読めるものではありません。私はこれを解読します。このファイルを解析および変更するためのライブラリーを実装するための仕様として、このファイルの形式を人間が読める形式で正確に文書化したいと思います。また、他の人にもわかりやすいといいですね。

そのような文書が書かれるかもしれないいくつかの方法があります。上記のPKZIPの例は非常に冗長で、主にファイル形式をフリーテキストで記述しています。PS2の例では、値のタイプ、オフセット、およびサイズの表と、それらの意味を詳しく説明しています。XentaxWikiにあるような多くの他のものは、変数のタイプとサイズのみをリストし、ほとんどまたはまったくコメントしていません。

この種のドキュメントの書き方に関するガイダンスを提供するコーディングスタイルガイドに似た標準があるかどうかを尋ねます。そうでない場合、私がエミュレートする必要がある有名な優れた例はありますか?そうでない場合、誰かが少なくともいくつかの有用なアドバイスを要約できますか?



ハ!私はその気持ちを知っています。私が見ていた1つの形式は、実際にはファイルを書き込んだ元のソースコードを持っていました。問題は、変数が構造体の定義とは異なる順序で書き込まれ、その間に余分なものが散在していることでした。そして、オフセットについてのコメントは間違っていました。それは、この質問の発端となったものの1つです。
Sopoforic 2014

1
文書化されたリバースエンジニアリングされたファイルタイプに関する私の唯一の経験は、wiibrew.orgからのものです。私が正しく覚えていれば、ファイルはとして文書化されていましたstruct。それはかなりうまくいきました。
MetaFight 2014

1
誤解しているかもしれませんが、EBNFのようなものを探しているようです。

@MattFenwick:BNFは言語の構文を指定するためのものです。私が求めているものとはかなり違います。どのようなファイル形式を意味するかを明確にするために編集します。
Sopoforic 2014

回答:


4

バイナリファイルは、特定の規則に従って論理ユニットに配置されたビットのシーケンスです。これらのルールは通常、文法と呼ばれます。文法は4つのタイプ(チョムスキー階層)に分類でき、Matt Fenwickのコメントで指摘されているように、文脈自由文法の場合はExtended Backus-Naur Formを使用する必要があります。ファイルに保存されたシーケンスの解釈(またはセマンティクス)は、口頭で、または情報をシリアル化および逆シリアル化した注釈付きのサンプルプログラムで説明できます。

バイナリファイル形式の文書化の詳細については、ASN.1標準などを参照することをお勧めします。


技術的には、ほとんどの構成ファイルは有限の言語を持っているため、コンテキストフリー言語を持っています。実際には、EBNFで「すべての2バイト文字列のセット」(たとえば、16アイテムのビットフィールドである構成ファイルの場合)を書き込んでも、何も教えられません。ASN.1の仕様はコンピューターによって読み取られることを意図しているようですが、ASN.1標準へのポインターは、私が得た答えに最も近いものであり、人間のためのドキュメントを書くための情報が必要でした。ただし、私の要件にこれ以上一致するものが見つからない場合は、まもなくこの回答を受け入れます。ご協力ありがとうございます。
Sopoforic 14

2

ファイル形式をすばやく検索するとWikipediaの記事(ファイル形式のリスト)が表示されるため、これは奇妙です。また、いくつかのビデオゲームデータ形式も含まれています。

ファイルシステムをサポートするシステム(最も一般的にはPCゲーム)でのビデオゲームのデータの一般的なファイル形式のリスト。

また、ビデオゲームストレージメディア形式の幅広い選択肢が含まれています。

ゲームのROMイメージまたはストレージメディアを元のROMデバイスからハードディスクなどの外部メモリにコピーして、バックアップの目的で、またはゲームをエミュレーターでプレイできるようにするときに使用される最も一般的なファイル名拡張子のリスト。カートリッジベースのソフトウェアの場合、プラットフォーム固有の拡張子を使用しないと、ファイル名拡張子「.rom」または「.bin」を使用して、ファイルにROMの内容のコピーが含まれていることを明確にします。通常、ROM、ディスク、またはテープイメージは、単一のファイルまたはROMではなく、ファイルまたはROM構造全体がバックアップメディア上の単一のファイルに含まれています。


ファイル形式を文書化するための承認された標準はありますか?

「公式」の基準はどこにもありません。ファイル形式は会社によって作成されるため、会社はドキュメントの形式を決定します。


2
私の質問を誤解していると思います。もちろん、文書化されているファイル形式はいくつもあります。XentaxWikiには、1500を超えるものが含まれています。しかし、私が関心を持っているファイルは、文書化されていないことがよくあります。通常、一般的なコンテナー形式ではなく、保存ファイルや構成などのゲーム固有のものです。私の状況は、ドキュメントが存在しないということであり、私はいくつか書くつもりです-それで、これはどのように行われますか?
Sopoforic 2014

他のすべてのファイル形式が文書化されたのと同じ方法。
ロバートハーベイ

4
@RobertHarvey:混乱、矛盾、不正確、不完全?しかし真剣に、私が述べたように、私はいくつかの異なる一般的なスタイルが使用されていることに気付きました。この分野での作業に慣れていないため、特定のスタイルを優先する必要があるかどうかはわかりません。XentaxWikiにあるものは、私が見た中で単一の最大のリソースですが、ほとんどがコンテナー形式専用であるため、より一般的なケースに完全には対応していません。ランダムな例を選んでエミュレートするだけで十分だと思っていたとしても、アドバイスを求めることはありません。
Sopoforic 2014

@Sopoforic:次に、質問の内容を明確にする必要があります。「ファイル形式のドキュメントを作成するにはどうすればよいですか?」その主題に専念しているテクニカルライティングに関する完全な教育カリキュラムがあります。(個人的な基準に従って)明確でよく書かれたドキュメントがあるフォーマットを見つけ、それをエミュレートします。彼らはすべてがらくたになることはできません。 ヒント:使用例は王様です。2番目に説明の明快さがあります。
ロバートハーベイ、

1
@RobertHarvey:はい、コードにコメントする方法や関数を文書化する方法に関する質問と同じように、包括的なフォーマット仕様を記述するための「スタイルガイド」を探しています。RFCの書き方を知りたい場合は、RFC 2223を参照してください。Pythonコードで使用するスタイルを知りたい場合は、PEP 8を読むことができます。質問の仕方を知りたい場合は、スマートな方法で、 ESRは私をカバーしています。ファイル形式の仕様について同様のガイダンスはありますか?または、よく知られている優れた例ですか?きっと自分の判断でやっていくことができますが、基準があればそれに従うのが賢明でしょう。
Sopoforic 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.