2009-03-06 21 views
18

Dado que un ejecutable compilado de C se ejecuta en Solaris, ¿es posible determinar qué compilador se utilizó para compilar el ejecutable incompleto asociado?¿Puede averiguar qué compilador se utilizó para compilar un programa?

No puedo ver nada cuando uso las cadenas o el comando de archivo, y la magia no parece contener nada específico.

¿Los compiladores generalmente ponen una huella digital en sus archivos ejecutables de salida?

aplausos,

+0

Buena pregunta. Supongo que hay diferencias (incluso entre las versiones y la configuración del compilador), pero la detección del compilador no será una tarea trivial. –

+0

pregunta interesante. ¿En qué sistema operativo estás pensando? –

+0

También depende de cuánto debe trabajar. Por ejemplo, gcc crea diferentes archivos o que cc. Si tiene un programa estático o un programa cargable dinámicamente, también puede ver qué bibliotecas se utilizan. En otras palabras, su huella digital no está en la lógica. –

Respuesta

2

Si el ejecutable no se pela, intente/usr/ccs/bin mcs-p Esto generalmente mostrará el compilador, enlazador y todos los archivos de cabecera utilizan

6

Sí IDA es ideal para esto. Utiliza una tecnología llamada FLIRT.

0

Visual Studio y GCC generalmente siguen diferentes rutinas de inicio (que llaman a main). Eso tal vez una pista. Aunque no sé sobre otros. Para dlls, no puedo pensar en algo similar en la parte superior de mi cabeza.

4

PEID hará el truco. Por lo general, funciona simplemente genial. Obviamente, PEID es una herramienta de Windows, pero no debería importarle y debería mostrarle el compilador (a veces incluso información de versión específica)

+1

Funciona solo para archivos PE. Solaris es ELF o posiblemente a.out – MSalters

+0

IDA funciona para solaris elfs. Ver mi publicación. –

+0

ops lo pierdo, buen punto. –

2

Cree pequeñas aplicaciones de prueba con cada compilador que está tratando de identificar. Luego mire los resultados en un editor hexadecimal y trate de encontrar patrones. Puede resultar realmente obvio, por ejemplo, el "Rich" signatures del enlazador de Microsoft.

0

Los compiladores suelen agregar su propia "firma" personal como texto sin formato en los archivos compilados. Puede usar una herramienta como cadenas para suscribir el texto sin formato.

+0

@Ignacio, lo intenté pero nada realmente saltó sobre mí. –

1

No despojado:

$ cc hola.c -O

archivo $ a.out

a.out: ELF 32-bit MSB SPARC32PLUS ejecutable Versión 1, V8 + Obligatorio, vinculada de forma dinámica, no despojado

$ cadenas -a a.out | grep cc

/opt/solarisstudio12.3/prod/bin/cc -O hola.c

$ dwarfdump -i a.out | grep compile_o

DW_AT_SUN_compile_options Xa; O; R = Sun C 5,12 SunOS_sparc Patch 148917-07 18/10/2013; backend; prima; cd;

Stripped:

$ tira a.out

$ archivo a.out

a.out: ELF 32-bit MSB SPARC32PLUS ejecutable Versión 1, V8 + Obligatorio, vinculada de forma dinámica, despojados

$ cadenas-a.fuera | grep cc

(ninguna)

Cuestiones relacionadas