Pegue a fonte do comando file. A maioria, senão todos os departamentos de código aberto, usam esse . O filecomando vem com o magicbanco 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 magicpá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: longsignifica 4 bytes no endianness da plataforma ; lelonge belongsignifica 4 bytes em ordem little-endian e big-endian, respectivamente.
Em vez de replicar as regras, convém chamar o fileutilitá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 libmagice chamar a função magic_fileou magic_buffer.