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/tmpsouborový 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/ccna/home/<myname>/cca použilddpro opravu binárního kódu použijte/tmpmí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í/tmpse 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