문제

바이너리/소스 코드 확인을 위해 동일한 컴퓨터에서 2주 간격으로 두 개의 컴파일을 만들고 바이너리가 동일하게 하여 일부 체크섬 테스트를 통과할 수 있기를 바랍니다.

지금까지 나는 타임스탬프가 컴파일러에 의해 바이너리에 기록될 가능성이 가장 높다는 것을 발견했습니다.이 msdn 기사에 따라 dumpbin /rawdata 결과를 비교하여 이 문제를 해결할 수 있습니다.

http://support.microsoft.com/kb/164151

그러나 dumpbin 결과는 여전히 약 12곳에서 다르며 예를 들어 그 차이는 여전히 일종의 타임스탬프(A1 73에서 C4 76으로 변경)로 나타납니다.

나는 이것이 델파이 컴파일러가 코드/데이터 섹션에 넣는 타임스탬프라고 가정하지만 이것이 일어나는 위치나 끄는 방법을 찾을 수 없습니다.다양한 컴파일러/링커 옵션을 사용해도 이 동작은 변경되지 않았습니다.

어떤 도움이라도 대단히 감사하겠습니다.

도움이 되었습니까?

해결책

우리는 몇 년 전에 이 질문에 대해 연구했는데, 내가 기억하는 바에 따르면 Borland/Codegear/Embarcadero의 사람들은 컴파일러가 정확히 동일한 입력에 대해 정확히 동일한 출력을 생성해야 한다는 개념에 동의하지 않는다는 것이었습니다. 현재 날짜-시간은 입력으로 간주할 수 없습니다.

이는 실망스럽습니다. 그러나 Delphi가 10개의 주요 버전보다 오래되었다는 점을 고려하면 아마도 변경되지 않을 것입니다.

다른 팁

질문에 대한 귀하의 의견을 바탕으로 이 질문에 대한 답변을 찾고 있다고 생각합니다.

특정 소스 파일 세트에 의해 특정 바이너리가 생성되었는지 어떻게 확인할 수 있습니까?

한 가지 방법은 다음과 같은 자동화된 구축 프로세스를 갖는 것입니다.

  1. 소스 코드에 고유한 확인 태그를 삽입합니다(GUID 문자열이나 포함 파일의 다른 항목처럼 간단할 수 있음).
  2. 해당 확인 태그를 사용하여 바이너리를 컴파일합니다.
  3. 결과 바이너리와 소스 코드를 전달 디렉터리 트리에 압축합니다.

소스코드가 실제로 해당 확인 태그를 사용하는지 확인해야 합니다(예를 들어 정보 상자 또는 이와 유사한 항목에 표시).

나는 사용한다 최종 빌더 이와 같은 빌드 프로세스를 자동화합니다.

--제로엔

불행하게도 나는 이 문제에 대한 어떤 대답도 들어보지 못했습니다.

타임스탬프뿐만 아니라 메모리에서 몇 바이트의 무작위 쓰레기가 결과로 나타나는 곳이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top