gleicher Source -> gleiche Binaries - möglich?



  • Hi!

    Gibt es irgendeine Möglichkeit dem VC (VC6 und 2005 wären speziell interessant, aber auch 2003) beizubringen dass er bei gleichen Sourcecodes auch aufs Bit gleiche Executables ausspuckt? Im "Release" wohlgemerkt - "Debug" ist mir egal.
    Das ganze müsste auch nicht immer funktionieren, "meistens" oder "oft" wäre schon ein riesen Fortschritt.

    Ich weiss nicht genau was in den Dateien unterschiedlich ist, hab's mir nur kurz in einem Hex-Diff Programm angesehen, aber so richtig schlau werde ich nicht daraus. Es sind auf jeden Fall bloss ein paar wenige Bytes insgesamt.

    Ein Teil der immer unterschiedlich wird ist der Verweis auf das PDB File (der Pfad ist natürlich gleich, aber ein paar Bytes davor sind anders -- wird wahrscheinlich ein Timestamp oder eine Prüfsumme sein). Das PDB File selbst ist dabei leider an vielen vielen Stellen unterschiedlich, obwohl nichts verschoben zu sein scheint (sind auch immer nur ein paar Byte unterschiedlich, dann wieder längere Stellen gleich), dürften also auch nur irgendwelche Timestamps oder ggf. auch Schrottwerte sein (alter Speicherinhalt der einfach nicht 0 gesetzt wird).

    Die Links auf das PDB File in der fertigen .exe (.dll) sollten dabei erhalten bleiben wenn das möglich ist.

    Also, gibt es da irgendwelche switches für den Compiler/Linker die da weiterhelfen könnten?

    Der Grund warum ich Frage: wir haben ein online update System wo alle geänderten Files von einer Version zur nächsten übertragen werden -- nur leider kennt dieses System keine Deltas. Und da ein Grossteil des Build Prozesses automatisiert ist werden für jede Version auch immer alle Projekte neu compiliert, egal ob sich da nun was geändert hat oder nicht ("alles löschen, alles getten, alles bauen"). Und da wäre es natürlich vorteilhaft wenn nicht immer alle .exe/.dll Files "different" wären, selbst wenn sich nix geändert hat.

    Danke,
    der Bär


  • Mod

    Bei gleichen Objektdateien und Headern wird auch gleicher Code erzeugt, bis auf den Timestamp und Prüfsumme den der Linker setzt. Aber das hast Du Dir ja schon selber heruasgefunden.

    Nach meinem Wissen gibt es keine Option diese Felder zu manipulieren außer Du schreibst einen eigenen Patcher, der diese Felder manipuliert. Das PE Format ist ja offen.

    Siehe Artikel zu PEDUMP von Matt Pietrek



  • @Martin Richter: Danke. Hatte schon befürchtet dass es da nix fertiges gibt. Aber naja, werden wir ohne das leben müssen - irgendwann müssen wir sowieso auf das Versenden von Deltas umstellen.


Anmelden zum Antworten