Come documentare una specifica del formato file [chiuso]


12

Per un progetto, devo lavorare con vari tipi di file da alcuni vecchi giochi e software correlati: file di configurazione, salvataggi, archivi di risorse e così via. La maggior parte di questi non è ancora documentata, né esistono strumenti per lavorare con loro, quindi devo decodificare i formati e costruire le mie librerie per gestirli.

Anche se non credo che ci sia una grande richiesta per gran parte, intendo pubblicare i risultati dei miei sforzi. Esistono standard accettati per la documentazione dei formati di file? Guardandosi intorno, ci sono diversi stili in uso: alcuni, come la specifica del formato di file .ZIP , sono molto prolissi; altri, come quelli su XentaxWiki, sono molto più concisi: trovo alcuni di essi difficili da leggere; quella che mi piace di più personalmente è questa descrizione del file system della scheda di memoria di PlayStation 2 , che include sia un testo descrittivo dettagliato che diverse "mappe di memoria" con offset e simili - inoltre si adatta molto al mio caso d'uso. Varia un po 'per i diversi formati, ma sembra che ci dovrebbero essere alcuni principi generali che dovrei provare a seguire.

Modifica: mi sembra di non aver spiegato molto bene cosa voglio fare. Lasciami costruire un esempio.

Potrei avere un vecchio software che memorizza la sua configurazione in un file 'binario' - una serie di bitfield, numeri interi, stringhe e quant'altro incollato insieme e compreso dal programma, ma non leggibile dall'uomo. Decifro questo. Vorrei documentare esattamente qual è il formato di questo file, in modo leggibile dall'uomo, come specifica per l'implementazione di una libreria per analizzare e modificare questo file. Inoltre, vorrei che questo fosse facilmente comprensibile da altre persone.

Esistono diversi modi per scrivere un documento del genere. L'esempio di PKZIP sopra è molto prolisso e descrive principalmente il formato del file in testo libero. L'esempio PS2 fornisce tabelle di tipi di valore, offset e dimensioni, con ampi commenti su cosa significano tutti. Molti altri, come quelli su XentaxWiki, elencano solo i tipi e le dimensioni delle variabili, con commenti piccoli o nulli.

Chiedo se esiste uno standard, simile a una guida di stile di codifica, che fornisce una guida su come scrivere questo tipo di documentazione. In caso contrario, c'è qualche esempio eccellente ben noto che dovrei emulare? In caso contrario, qualcuno può almeno riassumere qualche consiglio utile?



Ha! So come ci si sente. Un formato che stavo guardando in realtà avevo il codice sorgente originale che ha scritto il file. Il problema era che le variabili venivano scritte in un ordine diverso rispetto alla definizione della struttura, con alcune cose extra sparse in mezzo. E i commenti erano sbagliati sugli offset. Fa parte di ciò che ha ispirato questa domanda: un forte desiderio di NON FARLO.
Sopoforic,

1
La mia unica esperienza con i tipi di file documentati di ingegneria inversa proviene da wiibrew.org. Se ricordo bene, hanno documentato il file come a struct. Ha funzionato abbastanza bene.
MetaFight,

1
Potrei fraintendere la domanda, ma sembra che tu stia cercando qualcosa come EBNF .

@MattFenwick: BNF serve per specificare la sintassi di una lingua; non proprio quello che sto cercando. Modificherò per essere più chiaro che tipo di formato di file intendo.
Sopoforic,

Risposte:


4

Un file binario è solo una sequenza di bit disposti in unità logiche secondo determinate regole . Queste regole sono generalmente chiamate grammatica . La grammatica può essere classificata in quattro tipi (la gerarchia di Chomsky ), e per le grammatiche libere dal contesto dovresti usare Extended Backus-Naur Form, come sottolineato da Matt Fenwick nel suo commento. L'interpretazione (o semantica) della sequenza memorizzata nel file può essere descritta verbalmente o con programmi di esempio ben annotati che serializzano e deserializzano le informazioni.

Per saperne di più sulla documentazione dei formati di file binari, suggerisci di leggere ad esempio lo standard ASN.1 .


Tecnicamente , la maggior parte dei file di configurazione ha un linguaggio privo di contesto, dal momento che hanno un linguaggio finito. In pratica, scrivere "l'insieme di tutte le stringhe a 2 byte" (ad es. Per un file di configurazione che è solo un campo bit di 16 elementi) in EBNF non insegna a nessuno. Il puntatore allo standard ASN.1 è la cosa più vicina a una risposta che ho ottenuto, anche se sembra che una specifica in ASN.1 sia pensata per essere letta dai computer, e volevo informazioni per scrivere documentazione per l'uomo. Tuttavia, se non dovesse emergere nulla di più simile alle mie esigenze, tra poco accetterò questa risposta. Grazie per il vostro aiuto
Sopoforic,

2

È strano perché una rapida ricerca di formati di file ha fatto apparire un articolo di Wikipedia (Elenco dei formati di file) . Include anche diversi formati di dati di videogiochi .

Elenco di formati di file comuni di dati per videogiochi su sistemi che supportano filesystem, più comunemente giochi per PC.

Include anche un'ampia selezione di formati di supporti per l'archiviazione di videogiochi .

Elenco delle estensioni di file più comuni utilizzate quando l'immagine della ROM o il supporto di archiviazione di un gioco viene copiato da un dispositivo ROM originale su una memoria esterna come disco rigido a scopo di backup o per rendere il gioco giocabile con un emulatore. Nel caso di software basato su cartucce, se l'estensione specifica della piattaforma non viene utilizzata, le estensioni di file ".rom" o ".bin" vengono generalmente utilizzate per chiarire che il file contiene una copia di un contenuto di una ROM. Le immagini ROM, disco o nastro di solito non sono costituite da un singolo file o ROM, piuttosto da un intero file o struttura ROM contenuta in un singolo file sul supporto di backup.


Esistono standard accettati per la documentazione dei formati di file?

Non esiste uno standard "ufficiale" da nessuna parte. Poiché i formati di file sono creati da un'azienda, l'azienda decide in merito al formato per la documentazione.


2
Penso che tu abbia frainteso la mia domanda. Naturalmente ci sono molti formati di file che sono stati documentati: ho menzionato XentaxWiki, che comprende oltre 1500. Ma i file che mi interessano spesso non sono documentati - cose specifiche del gioco come i file di salvataggio o la configurazione, piuttosto che i formati generali del contenitore, di solito. La mia situazione è che non esiste documentazione e intendo scriverne un po ', quindi come si può fare?
Sopoforic,

Allo stesso modo tutti gli altri formati di file sono stati documentati.
Robert Harvey,

4
@RobertHarvey: confuso, conflittuale, impreciso e incompleto? Seriamente, però, come ho già detto, ho notato diversi stili generali in uso. Non ho abbastanza familiarità con il lavoro in quest'area per sapere se uno stile particolare deve essere preferito. Quelli su XentaxWiki, la singola risorsa più grande che abbia mai visto, sono quasi esclusivamente per i formati contenitore, quindi non si associano al caso più generale. Se pensassi che scegliere un esempio casuale da emulare sarebbe abbastanza buono, non chiederei un consiglio.
Sopoforic,

@Sopoforic: Quindi devi essere più chiaro nella tua domanda cosa vuoi. Ci stai chiedendo seriamente "Come posso scrivere la documentazione per un formato di file?" Ci sono interi curricula educativi sulla scrittura tecnica che sono dedicati a quell'argomento. Trova un formato che abbia una documentazione chiara e ben scritta (secondo i tuoi standard personali), ed emula quello. Non possono essere tutte cazzate. Suggerimento: gli esempi di utilizzo sono re. La chiarezza della spiegazione arriva un secondo vicino.
Robert Harvey,

1
@RobertHarvey: Sì, proprio come le domande su come commentare il codice o su come documentare una funzione, sto cercando una "guida di stile" per scrivere una specifica di formato comprensibile. Se voglio sapere come scrivere un RFC, posso guardare RFC 2223. Se voglio sapere quale stile usare nel codice Python, posso leggere PEP 8. Se voglio sapere come porre domande in modo intelligente, ESR mi ha coperto. Esiste una guida simile per le specifiche del formato file? O un noto esempio eccellente di uno? Posso sicuramente usare il mio giudizio, ma se esiste uno standard, sarebbe ragionevole seguirlo.
Sopoforic,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.