Una fuente de una pista para distinguir entre las versiones de VC es la biblioteca de tiempo de ejecución de C específica vinculada. Dado que el caso predeterminado es (al menos en las versiones modernas) para vincular a la DLL, esto es bastante fácil de hacer. La utilidad Dependency Walker es casi indispensable para verificar que usted sabe qué DLL realmente se están cargando, y le dirá qué C runtime DLL está en uso. Aunque Dependency Walker está incluido en el Microsoft Platform SDK, se ha extendido de forma independiente y el sitio que he vinculado es el hogar de su desarrollo actual.
VC6 y MinGW ambos se vinculan a MSVCRT.DLL de forma predeterminada, por lo que no se distinguirá entre ellos. Con un poco de esfuerzo, también se puede hacer que MinGW se vincule con las últimas versiones de tiempo de ejecución de C, por lo que tendrá que descartar de manera independiente MinGW.
Runtime VC Version
---------- -------------
MSVCRT.DLL VC6
MSCVR80.DLL VC8 (VS 2005)
MSCVR90.DLL VC9 (VS 2008)
Otras DLL de tiempo de ejecución serían buenas pistas también, p. las referencias al tiempo de ejecución de Delphi probablemente indiquen que el EXE en realidad fue construido a partir de Delphi, y no una cadena de herramientas de C en absoluto.
Si los símbolos no se han eliminado del archivo .EXE, entonces es posible que encuentre algunas pistas de los símbolos internos que están presentes. Por ejemplo, una referencia a algo como _sjlj_init
probablemente indica que un MinGW GCC 3.x configurado para el manejo de excepciones setjmp/longjmp estuvo involucrado en algún momento.
¿Qué lo impulsa a necesitar esta información? – ojblass
Primero, preguntándome qué versión de VS se usó para construir algunos de los binarios que tenemos aquí. (Estaba pensando en reconstruirlos con una versión más nueva de VS para un impulso de rendimiento casi libre.) Encontré a alguien que sabe la respuesta para estos binarios en particular, pero tengo curiosidad sobre si se puede hacer en general. – kquinn
¿No es la respuesta en ese caso solo reconstruir utilizando el compilador más nuevo en cualquier caso? O recompila usando el mismo compilador, sin hacer cambios, o termina usando un compilador más nuevo, brindándole las ventajas que mencionó. – jalf