Exe-Datei bei jedem Kompiliervorgang etwas anders
-
Ich habe mal eine etwas ungewöhnliche Frage: Wenn ich mit Visual C++ kompiliere, bekomme ich niemals zweimal die gleiche Datei raus. Also zum Beispiel: Ich stelle das ganze auf Release, kompiliere das Programm, benenne es um. Lösche alles im Release-Ordner und kompiliere das gleiche Programm nochmal. Wenn ich nun beide Dateien in der MS-DOS-Eingabeaufforderung mit
fc /b Programm1.exe Programm2.exe
vergleiche, sieht man immer, daß mindestens ein Byte anders ist. (Es liegt definitiv nicht an den unterschiedlichen Dateinamen, da diese nicht zum Dateiinhalt gehören.) Ich meine, das hat natürlich keine praktische Relevanz, aber mich würde schonmal interessieren, wieso der Compiler bei gleicher Ausgangsbedingung nicht exakt den gleichen Binärcode erstellt. Weiß da einer eine Antwort?
-
Vielleicht wird implizit oder explizit die Compilezeit gespeichert? In deiner .exe befindet sich ja nicht nur Code, sondern auch Header, Daten etc.
-
Naja, aber es ist recht unregelmäßig. Manchmal ist bloß ein Byte anders, manchmal mehrere, zum Beispiel drei.
-
In der EXE sind Timestamps und alles möglich drin...
http://groups.google.de/group/comp.os.ms-windows.programmer.tools/browse_thread/thread/d19fd4c54a8516d2/426bf5aaf2e39f31Du kannst zwei EXEn nicht mit fc vergleichen...
Siehe dazu auch die PE-Beschreibung:
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
-
O.k., vielen Dank für die Information.
Du kannst zwei EXEn nicht mit fc vergleichen...
Naja, solange es nur darum geht, zu gucken, ob die Binärdatei Byte für Byte identisch ist, kann man das schon (und zwar mit jeder Art Datei). Wenn man wissen will, ob beide das gleiche machen, ist das natürlich was anderes.
-
NES-Spieler schrieb:
O.k., vielen Dank für die Information.
Du kannst zwei EXEn nicht mit fc vergleichen...
Naja, solange es nur darum geht, zu gucken, ob die Binärdatei Byte für Byte identisch ist, kann man das schon (und zwar mit jeder Art Datei). Wenn man wissen will, ob beide das gleiche machen, ist das natürlich was anderes.
nein da EXE dateien Timestamps enthalten ist es sinnlos...könnt ihr nicht zur Abwechselung mal die richtigen Antworten von Jochen unangefochten stehen lassen?
MfG,
Ranner
-
Ich meinte jetzt nicht zwei Exe-Dateien, die ich aus demselben Quellcode kompiliert habe, sondern generell zwei Exe-Dateien (ohne mich jetzt überhaupt noch auf Programmierung und Kompilierung zu beziehen).
Ich wollte in meiner letzten Aussage also nur sagen: Wenn ich eine fertige Exe-Datei kopiere (zum Beispiel auf eine CD), dann kann ich diese sehr wohl mit der ursprünglichen Datei per fc /b vergleichen und es wird "Keine Unterschiede festgestellt" angezeigt. Ein Compiler liefert zwar immer eine andere Exe-Datei, aber eine fertige Datei wird durch einfaches Verschieben oder Kopieren nicht mehr vom Betriebssystem geändert und kann somit genau wie jede andere Datei per fc verglichen werden.