Para un proyecto, necesito trabajar con diferentes tipos de archivos de algunos juegos antiguos y software relacionado: archivos de configuración, archivos guardados, archivos de recursos, etc. La mayor parte de estos aún no están documentados, ni existen herramientas para trabajar con ellos, por lo que debo realizar ingeniería inversa de los formatos y construir mis propias bibliotecas para manejarlos.
Aunque no creo que haya una gran demanda para la mayoría, tengo la intención de publicar los resultados de mis esfuerzos. ¿Existen estándares aceptados para documentar formatos de archivo? Mirando a su alrededor, hay varios estilos en uso: algunos, como la especificación de formato de archivo .ZIP , son muy prolíficos; otros, como los de XentaxWiki, son mucho más concisos: algunos de ellos son difíciles de leer; La que más me gusta personalmente es esta descripción del sistema de archivos de la tarjeta de memoria de PlayStation 2 , que incluye texto descriptivo detallado y varios 'mapas de memoria' con compensaciones y demás: también coincide con mi caso de uso. Varía un poco para los diferentes formatos, pero parece que debería haber algunos principios generales que debería tratar de seguir.
Editar: parece que no he explicado muy bien lo que quiero hacer. Déjame construir un ejemplo.
Es posible que tenga algún software antiguo que almacene su configuración en un archivo 'binario': una serie de campos de bits, enteros, cadenas y todo lo que el programa no haya pegado y entendido, pero que no sea legible por humanos. Yo descifro esto. Deseo documentar exactamente cuál es el formato de este archivo, de una manera legible para los humanos, como una especificación para implementar una biblioteca para analizar y modificar este archivo. Además, me gustaría que otras personas lo entiendan fácilmente.
Hay varias formas en que se puede escribir dicho documento. El ejemplo PKZIP anterior es muy prolijo y describe principalmente el formato de archivo en texto libre. El ejemplo de PS2 proporciona tablas de tipos de valores, compensaciones y tamaños, con comentarios extensos sobre lo que significan. Muchos otros, como los de XentaxWiki, solo enumeran los tipos y tamaños variables, con poco o ningún comentario.
Pregunto si hay algún estándar, similar a una guía de estilo de codificación, que proporciona orientación sobre cómo escribir este tipo de documentación. Si no, ¿hay algún ejemplo excelente bien conocido que deba emular? Si no, ¿alguien puede al menos resumir algunos consejos útiles?
fuente
struct
. Funcionó bastante bien.Respuestas:
Un archivo binario es solo una secuencia de bits organizados en unidades lógicas de acuerdo con ciertas reglas . Estas reglas generalmente se llaman gramática . La gramática se puede clasificar en cuatro tipos (la jerarquía de Chomsky ), y para las gramáticas libres de contexto , debe usar la Forma Backus-Naur Extendida como lo señala Matt Fenwick en su comentario. La interpretación (o semántica) de la secuencia almacenada en el archivo puede describirse verbalmente o con programas de muestra bien anotados que serializan y deserializan la información.
Para saber más sobre la documentación de formatos de archivos binarios, sugiera leer, por ejemplo, en el estándar ASN.1 .
fuente
Eso es extraño porque una búsqueda rápida de formatos de archivo mostró un artículo de Wikipedia (Lista de formatos de archivo) . También incluye varios formatos de datos de videojuegos .
También incluye una gran selección de formatos de medios de almacenamiento de videojuegos .
No hay un estándar "oficial" en ninguna parte. Dado que los formatos de archivo son realizados por una empresa, la empresa decide el formato de la documentación.
fuente