compiler construction - ejecutar - ¿Puedes averiguar qué compilador se utilizó para compilar un programa?
compilar y ejecutar c en windows (7)
Dado un ejecutable compilado de C para ejecutarse en Solaris, ¿es posible determinar qué compilador se utilizó para compilar el ejecutable incompleto asociado?
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?
aclamaciones,
Sí IDA es ideal para esto. Utiliza una tecnología llamada FLIRT .
Visual Studio y GCC normalmente siguen diferentes rutinas de inicio (que llaman 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.
PEID hará el truco. Por lo general, funciona simplemente genial. Obviamente PEID es una herramienta de Windows, pero no debería importar y debería mostrarle al compilador (a veces incluso información de versión específica)
Crea pequeñas aplicaciones de prueba con cada compilador que intentas identificar. Luego mire los resultados en un editor hexadecimal y trate de encontrar patrones. Puede resultar realmente obvio, por ejemplo, las firmas "Ricas" del enlazador de Microsoft.
Los compiladores generalmente agregan su propia "firma" personal como texto sin formato en los archivos compilados. Puede usar una herramienta como cadenas para suscribir el texto sin formato.
Si el archivo ejecutable no está eliminado, pruebe / usr / ccs / bin mcs-p. Esto generalmente mostrará el compilador, el enlazador y todos los archivos de cabecera utilizados.
Sin despojar:
$ cc -O hello.c
$ archivo a.out
a.out: ELF 32-bit MSB ejecutable SPARC32PLUS Versión 1, V8 + Obligatorio, vinculado dinámicamente, no eliminado
$ strings -a a.out | grep cc
/opt/solarisstudio12.3/prod/bin/cc -O hello.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 2013/10/18; backend; raw; cd;
Despojado:
$ tira a.out
$ archivo a.out
a.out: ELF 32 bits MSB ejecutable SPARC32PLUS versión 1, V8 + obligatorio, vinculado dinámicamente, eliminado
$ strings -a a.out | grep cc
(ninguna)