Pegue a fonte do comando file. A maioria, senão todos os departamentos de código aberto, usam esse . O file
comando vem com o magic
banco de dados, nomeado após os números mágicos que ele descreve. (Esse banco de dados também é instalado no seu sistema ativo, mas em um formato compilado.) Procure o arquivo que contém o texto de descrição que você vê:
grep 'Berkeley DB' magic/Magdir/*
A magic
página do manual descreve o formato do arquivo. As linhas de gatilho para "Berkeley DB" são
0 long 0x00061561 Berkeley DB
0 belong 0x00061561 Berkeley DB
12 long 0x00061561 Berkeley DB
12 belong 0x00061561 Berkeley DB
12 lelong 0x00061561 Berkeley DB
12 long 0x00053162 Berkeley DB
12 belong 0x00053162 Berkeley DB
12 lelong 0x00053162 Berkeley DB
12 long 0x00042253 Berkeley DB
12 belong 0x00042253 Berkeley DB
12 lelong 0x00042253 Berkeley DB
12 long 0x00040988 Berkeley DB
12 belong 0x00040988 Berkeley DB
12 lelong 0x00040988 Berkeley DB
A primeira coluna especifica o deslocamento no qual uma determinada sequência de bytes deve ser encontrada. A terceira coluna contém a sequência de bytes. A segunda coluna descreve o tipo de sequência de bytes: long
significa 4 bytes no endianness da plataforma ; lelong
e belong
significa 4 bytes em ordem little-endian e big-endian, respectivamente.
Em vez de replicar as regras, convém chamar o file
utilitário; é especificado pelo POSIX , mas os formatos que ele reconhece e as descrições que ele gera não são. Como alternativa, você pode vincular libmagic
e chamar a função magic_file
ou magic_buffer
.