Přečetl jsem si tento citát (níže) několikrát, naposledy zde, a jsem neustále zmatený tím, jak dd
lze použít k opravě cokoli natož kompilátor:
Unixový systém, který jsem používal ve škole před 30 lety, byl velmi omezený v paměti RAM a na disku. Zejména
/usr/tmp
souborový systém byl velmi malý, což vedlo k problémům, když se někdo pokusil zkompilovat velký program. Samozřejmě, že studenti stejně neměli psát „velké programy“; velké programy byly typicky zdrojové kódy zkopírované „odněkud“. Mnoho z nás zkopírovalo/usr/bin/cc
na/home/<myname>/cc
a použildd
pro opravu binárního kódu použijte/tmp
místo/usr/tmp
, která byla větší. Problém to samozřejmě jen zhoršilo – na místě na disku, které tyto kopie zabíraly, tehdy záleželo, a nyní/tmp
se pravidelně plní, což ostatním uživatelům brání v úpravách jejich souborů. Poté, co systémoví správci zjistili, co se stalo, provedlichmod go-r /bin/* /usr/bin/*
který problém „opravil“ a odstranil všechny naše kopie kompilátoru C.
(Zdůrazněno moje)
dd
manuálová stránka neříká nic o záplatování a nemyslím si, že by to bylo možné znovu použít.
Dalo by se skutečně binární soubory opravit pomocí dd
? Má to nějaký historický význam?
Přijatá odpověď:
Pojďme to zkusit. Zde je triviální program C:
#include <stdio.h>
int main(int argc, char **argv) {
puts("/usr/tmp");
}
Zabudujeme to do test
:
$ cc -o test test.c
Pokud jej spustíme, vypíše „/usr/tmp“.
Pojďme zjistit, kde „/usr/tmp
” je v binárním tvaru:
$ strings -t d test | grep /usr/tmp
1460 /usr/tmp
-t d
vytiskne offset v desítkové soustavě do souboru každého nalezeného řetězce.
Nyní vytvoříme dočasný soubor pouze s „/tmp