Ich habe dieses Zitat (unten) mehrmals gelesen, zuletzt hier, und bin immer wieder verwirrt darüber, wie dd
funktioniert kann verwendet werden, um alles zu patchen geschweige denn ein Compiler:
Das Unix-System, das ich vor 30 Jahren in der Schule benutzte, war in Bezug auf RAM und Festplattenspeicher sehr begrenzt. Insbesondere /usr/tmp
Dateisystem war sehr klein, was zu Problemen führte, wenn jemand versuchte, ein großes Programm zu kompilieren. Natürlich sollten Studenten sowieso keine „großen Programme“ schreiben; Große Programme waren typischerweise Quellcodes, die von „irgendwo“ kopiert wurden. Viele von uns haben /usr/bin/cc
kopiert nach /home/<myname>/cc
, und benutzte dd
um die Binärdatei so zu patchen, dass sie /tmp
verwendet statt /usr/tmp
, was größer war. Natürlich verschlimmerte dies das Problem nur noch – der von diesen Kopien belegte Speicherplatz spielte damals eine Rolle, und jetzt /tmp
füllten sich regelmäßig und hinderten andere Benutzer daran, ihre Dateien überhaupt zu bearbeiten. Nachdem sie herausgefunden hatten, was passiert war, führten die Systemadministratoren einen chmod go-r /bin/* /usr/bin/*
durch wodurch das Problem „behoben“ und alle unsere Kopien des C-Compilers gelöscht wurden.
(Hervorhebung von mir)
Der dd
Die Manpage sagt nichts über das Patchen aus und ich glaube nicht, dass sie dazu umfunktioniert werden könnte.
Könnten Binärdateien wirklich mit dd
gepatcht werden? ? Hat das eine historische Bedeutung?
Akzeptierte Antwort:
Lass es uns versuchen. Hier ist ein triviales C-Programm:
#include <stdio.h>
int main(int argc, char **argv) {
puts("/usr/tmp");
}
Wir werden das in test
einbauen :
$ cc -o test test.c
Wenn wir es ausführen, gibt es „/usr/tmp“.
aus
Lassen Sie uns herausfinden, wo „/usr/tmp
” ist in der Binärdatei:
$ strings -t d test | grep /usr/tmp
1460 /usr/tmp
-t d
gibt den Offset dezimal in die Datei jeder gefundenen Zeichenfolge aus.
Lassen Sie uns nun eine temporäre Datei mit nur „/tmp