5

Dla celów weryfikacji kodu binarnego/kodu źródłowego chciałbym móc wykonać dwie kompilacje na tym samym komputerze w odstępie 2 tygodni i mieć identyczne pliki binarne i tym samym przekazać pewien test sumy kontrolnej.Kompilowanie dwa razy z Delphi 6 i otrzymywanie tej samej sumy kontrolnej na binarnie

Do tej pory odkryłem, że najprawdopodobniej znacznik czasu zostanie zapisany przez kompilator do pliku binarnego. Mogę obejść to, porównując wyniki dumpbin/rawdata z tym artykułem msdn.

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

Jednakże wyniki DUMPBIN ciągle różnią się w sposób około kilku miejscach, a różnica ciągle pojawia się pewien rodzaj znacznika czasu (zmiana z 73 do C4 A1 76) na przykład.

Zakładam, że jest to znacznik czasu, który kompilator Delphi umieszcza w sekcjach kodu/danych, ale nie mogę znaleźć miejsca, w którym to się dzieje ani jak je wyłączyć. Fiddling z różnymi opcjami kompilatora/linkera nie zmienił tego zachowania.

Każda pomoc zostanie bardzo doceniona.

+0

Jestem po prostu ciekawostką (bez zamierzonego przewinienia): Jaki scenariusz chcesz sprawdzić, czy suma kontrolna exe nie zmieniła się między 2 kompilacjami? –

+0

Zdobyłbym to każdy ".obj "(lub odpowiednik w Delphi) ma znacznik czasu, który znajduje się w twoim pliku .exe – jmucchiello

+0

ma związek z transferem kodu, w którym kontrahent musi przetestować plik binarny, a następnie zweryfikować, czy kod ten odpowiada. "Był w stanie wymyślić inny system, dzięki któremu można to zrobić do tej pory. –

Odpowiedz

1

Zbadaliśmy to pytanie kilka lat temu, a jak pamiętam odpowiedź była po prostu, że ludzie w Borland/CodeGear/Embarcadero nie zapisać się na założeniu, że kompilator powinien dokładnie produkować ten sam sygnał wyjściowy z dokładnie tym samym wejściem (biorąc pod uwagę, że bieżąca data-godzina nie może być uznana za dane wejściowe).

Jest to niezadowalające, ale biorąc pod uwagę, że Delphi ma ponad 15 głównych wersji, prawdopodobnie się nie zmieni.

0

Niestety, nie słyszałem o żadnej odpowiedzi na ten problem.

To nie tylko sygnatury czasowe, ale są miejsca, w których w wyniku kończy się kilka bajtów losowych śmieci z pamięci.

1

oparciu o komentarz w tej kwestii, myślę, że szukasz odpowiedzi na to pytanie:

Jak mogę sprawdzić, czy pewna binarny jest tworzony przez pewien zestaw plików źródłowych

Jednym ze sposobów jest mieć wbudowany zautomatyzowany proces, który:

  1. Wstawki unikalny tag verififcation w kodzie źródłowym (może być tak proste, jak ciągiem GUID lub coś indziej w include pliku)
  2. kompiluje pliki binarne za pomocą tego tagu weryfikacyjnego
  3. pakuje wygenerowany kod binarny i źródłowy w drzewie katalogów dostawy

Musisz upewnić się, że kod źródłowy rzeczywiście używa tego tagu weryfikacyjnego (na przykład wyświetlając w polu okólnym lub podobnym).

Używam FinalBuilder do automatyzacji procesów kompilacji w ten sposób.

--jeroen

Powiązane problemy