VC 버전을 구별하는 힌트의 한 가지 소스는 링크 된 특정 C 런타임 라이브러리입니다. 디폴트 케이스는 (적어도 최신 버전에서는) DLL에 링크하기 때문에, 이것은 상당히 쉽습니다. 유틸리티 Dependency Walker은 실제로 어떤 DLL이로드되고 있는지를 확인하는 데 필수적이며 어떤 C 런타임 DLL이 사용 중인지 알려줍니다. Dependency Walker는 Microsoft Platform SDK에 포함되어 있지만 독립적으로 확장되었으며 연결된 사이트는 현재 개발 중입니다.
VC6과 MinGW는 모두 기본적으로 MSVCRT.DLL에 연결되므로이 둘 사이에 구별되지 않습니다. 약간의 노력으로, MinGW는 최신 C 런타임 버전에도 링크 될 수 있으므로, MinGW를 독립적으로 배제해야합니다.
Runtime VC Version
---------- -------------
MSVCRT.DLL VC6
MSCVR80.DLL VC8 (VS 2005)
MSCVR90.DLL VC9 (VS 2008)
다른 런타임 DLL도 좋은 단서가됩니다. Delphi의 런타임에 대한 언급은 아마 EXE가 실제로 C 툴체인이 아니라 Delphi에서 만들어 졌다는 것을 나타냅니다.
.EXE 파일에서 기호가 제거되지 않은 경우 내부 기호가있는 몇 가지 단서를 찾을 수 있습니다. 예를 들어, _sjlj_init
과 같은 것에 대한 참조는 setjmp/longjmp 예외 처리를 위해 구성된 MinGW GCC 3.x가 어느 시점에서 관련되었다는 것을 나타냅니다.
이 정보가 도움이 될만한 주요 요인은 무엇입니까? – ojblass
먼저 우리가 가지고있는 바이너리의 일부를 빌드하기 위해 어떤 버전의 VS를 사용했는지 궁금합니다. (거의 무료 성능 향상을 위해 새로운 버전의 VS로 다시 빌드 할 생각이었습니다.)이 특정 바이너리에 대한 대답을 알고있는 누군가를 찾았지만 일반적으로 수행 할 수 있는지 궁금합니다. – kquinn
어쨌든 최신 컴파일러를 사용하여 다시 작성하는 경우에는 그 대답이 아닙니까? 동일한 컴파일러를 사용하여 다시 컴파일하거나 아무런 변경을하지 않거나 더 새로운 컴파일러를 사용하게되면 앞에서 언급 한 이점을 얻을 수 있습니다. – jalf