Pregunta

Dado un fichero, Quiero comprobar si se trata de una DLL o un objeto compartido (Linux) o una dylib (Mac OS X), o algo diferente. Mi interés principal es diferenciar ejecutable y DLL en Linux y Mac OS X. Para las ventanas, la extensión debe ser suficiente para que mi problema.

Ya comprobado que la técnica de número mágico no funciona para Linux como ejecutable y objetos compartidos ambos tienen el mismo número.

¿Fue útil?

Solución

El Unix (Linux y Mac OS X) file comando sabe cómo identificar los tipos de archivo.

man file le informa acerca de la información 'magia' se utiliza para hacer esto, y en particular cuando el archivo con la información que se encuentra.

man 5 magic describe el archivo en detalle y también debe decirle donde vive. Puede echar un vistazo allí y nada de tracción que necesita de ella. Y / o código de la cuna de la fuente de file.

Actualización:
Tenga en cuenta que en Linux un archivo podría ser ambos un ejecutable y una biblioteca compartida al mismo tiempo.
Un ejemplo es /lib/libc.so.6 (una biblioteca compartida que puede ser ejecutado).
Otro ejemplo: cualquier ejecutable generado con la bandera -pie puede ser utilizado como una biblioteca compartida. Ver esta respuesta para más detalles.

Otros consejos

Utilice la herramienta file (para el sistema operativo Linux y Mac).

Escribir un programa, intentará cargar el archivo DLL - si tiene éxito, es uno :)

Editar: Muy bien, este puede ser que también tenga éxito para ejecutables: - /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top