file (1) y magic (5): describe otros formatos

8

¿Puedo usar filey magic( http://linux.die.net/man/5/magic ) para anular la descripción de algunos otros formatos conocidos?

por ejemplo, me gustaría describir los siguientes formatos:

que son 'solo' archivos de texto

O

eso es 'solo' un archivo comprimido que comienza con el número mágico BAM\1

?

¿Conoces algún ejemplo?

¿Es posible proporcionar un código C personalizado para probar el archivo en lugar de usar el formato mágico?

Pierre
fuente

Respuestas:

8

Puede usar la -mopción para especificar una lista alternativa de archivos mágicos, y si incluye el suyo antes del archivo mágico compilado ( /usr/share/file/magic.mgcen mi sistema) en esa lista, esos patrones se probarán antes que los "globales". Puede crear una función, o un alias, para usar esa opción de forma transparente siempre de forma transparente simplemente emitiendo el filecomando.

El lenguaje utilizado en el archivo mágico es bastante poderoso, por lo que rara vez es necesario volver a la codificación C personalizada. La única vez que me sentí inclinado a hacerlo fue en los 90 es cuando coincidan los archivos HTML y XML era difícil porque no había manera (en ese momento) para tener la carcasa flexible y de desplazamiento de adaptación necesaria para ser capaz de analizar <HTMLy < Htmly < htmlcon un patrón . Implementé eso en C como modificador del patrón 'string', permitiendo ignorar mayúsculas y minúsculas y compactar espacios en blanco (opcionales) .

Estos cambios en C también requirieron la adaptación de los archivos mágicos . Y a menos que el filecódigo fuente haya cambiado significativamente desde entonces, siempre tendrá que modificar (o proporcionar reglas adicionales) en los magicarchivos que coincidan con esos cambios en el código C. Por lo tanto, podría comenzar intentando hacerlo solo con cambios en los archivos mágicos y volver a cambiar el código C si eso realmente no funciona.

Anthon
fuente
Gracias, el repositorio de github con los ejemplos fue muy útil.
Pierre
1

Para el siguiente usuario $ (user_searchengine) que encuentre esto:

Las reglas simples como BAM se ven así:
OFFSET TYPE [OPERAND]FLAG MESSAGE
En el caso de BAM:
0 string BAM\1 BAM
Esto imprimiría la cadena BAM al encontrar el encabezado.

Para obtener más información, esta información de sitios de IBM parece estar un poco desactualizada, pero aún así debería ser suficiente para casos de uso simples. El hombre también tiene mucha información sobre el formato.

SleepProgger
fuente
0

No necesita usar siempre la -mopción; como documento y en su página de manual file(1)también leerá por defecto el ~/.magicarchivo (o una versión compilada del mismo ~/.magic.mgc), para que pueda agregar sus definiciones allí; no hay necesidad de meterse con todo el sistema /usr/share/magic*o /etc/magic.

Mosvy
fuente