Ho letto questa citazione (sotto) diverse volte, l'ultima qui, e sono continuamente perplesso su come dd
può essere usato per correggere qualsiasi cosa per non parlare di un compilatore:
Il sistema Unix che usavo a scuola, 30 anni fa, era molto limitato in RAM e spazio su disco. In particolare, il /usr/tmp
il file system era molto piccolo, il che portava a problemi quando qualcuno tentava di compilare un programma di grandi dimensioni. Naturalmente, gli studenti non dovevano comunque scrivere "programmi di grandi dimensioni"; i programmi di grandi dimensioni erano in genere codici sorgente copiati da "qualche parte". Molti di noi hanno copiato /usr/bin/cc
a /home/<myname>/cc
e usato dd
per correggere il binario per usare /tmp
invece di /usr/tmp
, che era più grande. Ovviamente, questo ha solo peggiorato il problema:lo spazio su disco occupato da queste copie contava a quei tempi, e ora /tmp
riempito regolarmente, impedendo ad altri utenti di modificare i propri file. Dopo aver scoperto cosa è successo, gli amministratori di sistema hanno eseguito un chmod go-r /bin/* /usr/bin/*
che ha "risolto" il problema e cancellato tutte le nostre copie del compilatore C.
(sottolineatura mia)
Il dd
man-page non dice nulla sull'applicazione di patch e non credo che potrebbe essere riproposto per farlo comunque.
I binari potrebbero davvero essere corretti con dd
? C'è un significato storico in questo?
Risposta accettata:
Proviamolo. Ecco un banale programma C:
#include <stdio.h>
int main(int argc, char **argv) {
puts("/usr/tmp");
}
Lo incorporeremo in test
:
$ cc -o test test.c
Se lo eseguiamo, stampa "/usr/tmp".
Scopriamo dove “/usr/tmp
” è nel binario:
$ strings -t d test | grep /usr/tmp
1460 /usr/tmp
-t d
stampa l'offset in decimale nel file di ogni stringa trovata.
Ora creiamo un file temporaneo con solo "/tmp