2011-12-28 2 views
4

Visual Studio로 컴파일 된 실행 파일 확인과 관련하여 체크섬을 사용하여 질문이 있습니다. src에서 프로젝트를 빌드하면 실행 파일로 끝납니다 그것을 exec1.exe라고 부르십시오. 그 안에는 메타 데이터가 들어 있습니다. 나중에 동일한 정확한 src를 다시 빌드하면 다른 실행 파일 인 exec2.exe가 생기고 자체 메타 데이터 섹션도 갖게됩니다.동일한 정확한 소스에서 빌드 된 두 실행 파일의 체크섬 비교

두 파일 각각에 대한 체크섬을 만들면 두 파일 간의 메타 데이터 정보가 다르기 때문에 두 파일의 체크섬이 다릅니다. 메타 데이터에 관계없이 두 파일의 체크섬을 수행하면 동일한 체크섬 값이 생길 수 있으므로 파일 체크섬을 수행 할 때 메타 데이터를 무시하는 방법을 알고있는 사람이 있습니까? 또는 바이너리를 컴파일하는 방법. src가 같으면 같은 실행 파일로 끝나야합니까? 체크섬이 없습니다 감사

+0

PE 데이터에는이 메타 데이터가 저장되어 있습니까? 당신은 아직 그것을 고립 시켰습니까? – ildjarn

답변

5

There is no guarantee that Visual C++ will generate the same binary image when building the same source files on successive builds. 귀하의 의견에 미리

덕분에, 이러한 방식으로 사용되는, 연구의 조금 후에이 달성하기 어려운 것 같다. 오히려 this kb article과 같은 리소스는 파일을 비교하는 데 도움을 줄 수 있습니다.

체크섬은 일반적으로 데이터를 보내거나 저장함으로써 발생하는 오류를 찾는 데 사용되며 실행 파일의 버전/빌드를 비교하지 않습니다.

0

pdb 파일이있는 경우 DIA sdk을 사용하여 실행 파일을 빌드하는 데 사용 된 모든 소스 파일을 쿼리 할 수 ​​있습니다. 기본적으로 모든 IDiaSourceFile을 열거하고 각 IDiaSourceFile에는 get_checksum 메서드가 있습니다. 실행 파일을 만드는 데 사용 된 소스 파일의 모든 체크섬을 조합 한 마스터 체크섬을 생성 할 수 있습니다. 소스 파일의 체크섬 중 하나라도 변경되면 실행 파일이 변경되었다고 가정 할 수 있습니다.

Visual Studio에서 디버깅을 위해 소스 파일이 pdb와 동기화되어 있는지 확인하기 위해 사용하는 메커니즘과 동일합니다.

관련 문제