'ar' Überschreibungszeitstempel der Bibliothek

8

Der .a-Archivformat-Header benötigt einen Zeitstempel. Dies hat zu unzähligen Kopfschmerzen geführt, wenn ich eine statische Bibliothek neu erstellte, hauptsächlich weil ich die ursprüngliche Binärdatei nicht genau reproduzieren kann.

Zum Beispiel (das ist auf meinem Mac, aber das gleiche passiert in x64 Linux):

%Vor%

Um mir selbst zu beweisen, dass der einzige Unterschied die Zeit war, nahm ich ein Diff auf Basis von Hexdump:

%Vor%

entspricht dem Zeitfeld, wenn Sie das Header-Format verwenden.

Manpage gibt keinen Hinweis darauf, ob es möglich ist, den Zeitstempel aus der Kopfzeile zu überschreiben. Irgendwelche Gedanken?

Bearbeiten: Ja, es ist möglich, zurückzugehen und die Datei physisch zu hacken, um einen beliebigen Zeitstempel zu verwenden. Ja, es ist möglich, das Verhalten des Programms zu ändern. Angesichts der Umstände, die nicht ausschließlich technischer Natur sind, ist ein Tool zum manuellen Ändern des Zeitstempels nicht akzeptabel, ebenso wenig eine modifizierte Version von ar , noch wird mit der tatsächlichen Systemzeit herumgespielt.

>

Edit: In diesem Fall muss ich beweisen, dass ohne eine inakzeptable Abweichung vom Build-Pfad, die Binärdateien von der Quelle erzeugt werden können. In einigen Branchen (z. B. Finanzen) ist dies offenbar eine Standardpraxis. Ein handgerolltes Tool zum Ändern der Zeitstempel ist inakzeptabel (weil ein spezielles Tool verwendet wurde, das nicht im ursprünglichen Buildpfad enthalten war). Eine handgerollte Version von ar ist inakzeptabel (ähnliches Problem). Das Problem mit der Änderung der Systemuhr ist, dass der Build perfekt koordiniert werden muss (es ist eine Stunde lang Build mit einer Menge von Bibliotheken und Binärdateien). Zu den akzeptablen Lösungen gehören:

  • kennzeichnet AR oder andere Programme, die den Zeitstempel in der Bibliothek überschreiben können
  • ein existierendes (Alter & gt; 1 Jahr) Werkzeug, um dies zu tun
  • kennzeichnet den GCC, der den Zeitstempel von ar bei der Verknüpfung
  • überschreiben könnte
Foo Bah 19.07.2011, 02:40
quelle

4 Antworten

1

Wenn der Rest der Binärdatei immer genau gleich ist, können Sie den Zeitstempel in der .a -Datei finden und ihn mit einem festen Wert überschreiben (wie alle Nullen).

    
Frédéric Hamidi 31.07.2011, 02:50
quelle
16
___ qstnhdr ___ 'ar' Überschreibungszeitstempel der Bibliothek ___ qstntxt ___

Der .a-Archivformat-Header benötigt einen Zeitstempel. Dies hat zu unzähligen Kopfschmerzen geführt, wenn ich eine statische Bibliothek neu erstellte, hauptsächlich weil ich die ursprüngliche Binärdatei nicht genau reproduzieren kann.

Zum Beispiel (das ist auf meinem Mac, aber das gleiche passiert in x64 Linux):

%Vor%

Um mir selbst zu beweisen, dass der einzige Unterschied die Zeit war, nahm ich ein Diff auf Basis von Hexdump:

%Vor%

entspricht dem Zeitfeld, wenn Sie das Header-Format verwenden.

Manpage gibt keinen Hinweis darauf, ob es möglich ist, den Zeitstempel aus der Kopfzeile zu überschreiben. Irgendwelche Gedanken?

Bearbeiten: Ja, es ist möglich, zurückzugehen und die Datei physisch zu hacken, um einen beliebigen Zeitstempel zu verwenden. Ja, es ist möglich, das Verhalten des Programms zu ändern. Angesichts der Umstände, die nicht ausschließlich technischer Natur sind, ist ein Tool zum manuellen Ändern des Zeitstempels nicht akzeptabel, ebenso wenig eine modifizierte Version von ranlib , noch wird mit der tatsächlichen Systemzeit herumgespielt.

>

Edit: In diesem Fall muss ich beweisen, dass ohne eine inakzeptable Abweichung vom Build-Pfad, die Binärdateien von der Quelle erzeugt werden können. In einigen Branchen (z. B. Finanzen) ist dies offenbar eine Standardpraxis. Ein handgerolltes Tool zum Ändern der Zeitstempel ist inakzeptabel (weil ein spezielles Tool verwendet wurde, das nicht im ursprünglichen Buildpfad enthalten war). Eine handgerollte Version von ranlib -D ist inakzeptabel (ähnliches Problem). Das Problem mit der Änderung der Systemuhr ist, dass der Build perfekt koordiniert werden muss (es ist eine Stunde lang Build mit einer Menge von Bibliotheken und Binärdateien). Zu den akzeptablen Lösungen gehören:

  • kennzeichnet AR oder andere Programme, die den Zeitstempel in der Bibliothek überschreiben können
  • ein existierendes (Alter & gt; 1 Jahr) Werkzeug, um dies zu tun
  • kennzeichnet den GCC, der den Zeitstempel von ar bei der Verknüpfung
  • überschreiben könnte
___ answer6887248 ___

Wenn der Rest der Binärdatei immer genau gleich ist, können Sie den Zeitstempel in der ranlib -Datei finden und ihn mit einem festen Wert überschreiben (wie alle Nullen).

    
___ answer6810848 ___

Mit dd können Sie den gewünschten Teil der Datei überschreiben:

%Vor%

das bedeutet natürlich, dass Sie Ihren Zeitstempel woanders brauchen (Sie können ein sehr einfaches c-Programm haben, das die aktuelle Zeit nimmt und es in Little Endian oder Big Endian ausgibt und dann mit dd die Bibliotheksdatei überschreiben kann) . Mit dd kann ich die .a-Datei überschreiben und bekomme keine Diff-Ergebnisse

    
___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ answer6807713 ___

Die Standardantwort lautet "Es kann nicht vom AR-Tool ausgeführt werden"

    
___ tag123linux ___ LINUX FRAGEN MÜSSEN PROGRAMMIEREN VERWANDT SEIN. Verwenden Sie dieses Tag nur, wenn sich Ihre Frage auf das Programmieren mit Linux-APIs oder das Linux-spezifische Verhalten bezieht, nicht nur, weil Sie Ihren Code unter Linux ausführen. Wenn Sie Linux-Unterstützung benötigen, können Sie https://unix.stackexchange.com oder https://askubuntu.com ausprobieren ___ tag123staticlibraries ___ eine Menge von Variablen und Funktionen, die in einer Datei gepackt sind, während des Programm-Builds vom Linker gelesen und in die resultierende ausführbare Datei eingeschlossen werden ___ tag123ar ___ Das Unix-Archivierungsdienstprogramm, das hauptsächlich zum Verwalten statischer Bibliotheken verwendet wird. Für Fragen zur Augmented Reality verwenden Sie [Augmented-Reality], nicht dieses Tag. ___ tag123a ___ Eine statische Bibliothek mit Objektcode in UNIX / Linux, die vom Verknüpfungseditor zum Erstellen eines ausführbaren Programms verwendet werden kann. ___
Michał Šrajer 25.07.2011 23:40
quelle
5

Mit dd können Sie den gewünschten Teil der Datei überschreiben:

%Vor%

das bedeutet natürlich, dass Sie Ihren Zeitstempel woanders brauchen (Sie können ein sehr einfaches c-Programm haben, das die aktuelle Zeit nimmt und es in Little Endian oder Big Endian ausgibt und dann mit dd die Bibliotheksdatei überschreiben kann) . Mit dd kann ich die .a-Datei überschreiben und bekomme keine Diff-Ergebnisse

    
marcelog 25.07.2011 00:56
quelle
-1

Die Standardantwort lautet "Es kann nicht vom AR-Tool ausgeführt werden"

    
Foo Bah 24.07.2011 15:28
quelle

Tags und Links