Pergunta

Dado um arquivo, quero verificar se é uma DLL, ou um objeto compartilhado (Linux) ou um dylib (Mac OS X), ou algo diferente.Meu principal interesse é diferenciar executável e DLL em Linux e Mac OS X.Para Windows, a extensão deve ser suficiente para o meu problema.

Já verifiquei que a técnica do número mágico não funciona no Linux, pois objetos executáveis ​​​​e compartilhados possuem o mesmo número.

Foi útil?

Solução

O comando Unix (Linux e Mac OS X) file sabe como identificar tipos de arquivos.

man file informa sobre as informações 'mágicas' usadas para fazer isso e, em particular, onde o arquivo com essas informações pode ser encontrado.

man 5 magic descreve o arquivo em detalhes e também deve informar onde ele está.Você pode dar uma olhada lá e extrair tudo o que precisar.E/ou apenas código de berço da fonte de file.

Atualizar:
Observe que no Linux um arquivo pode ser ambos um executável e uma biblioteca compartilhada ao mesmo tempo.
Um exemplo é /lib/libc.so.6 (uma biblioteca compartilhada que pode ser executada).
Outro exemplo:qualquer executável construído com -pie flag pode ser usado como uma biblioteca compartilhada.Ver esse responda para obter detalhes.

Outras dicas

Use o file ferramenta (para Linux e Mac OS).

Escreva um programa, tente carregar a DLL - se tiver sucesso, é uma delas :)

Editar:Ok, isso também pode funcionar para executáveis ​​:-/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top