GNU/Linux >> Znalost Linux >  >> Linux

Oprava binárního kódu pomocí Dd?

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žil dd 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, provedli chmod 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

Linux
  1. Trasování jádra pomocí trace-cmd

  2. Příkaz Nohup s příklady

  3. JQ Command v Linuxu s příklady

  1. Používáte Notify-Send s Cronem?

  2. Nahrajte soubory jako ASCII nebo binární pomocí FTP

  3. kontrola, zda je binární soubor zkompilován s -static

  1. Nainstalujte Linux pomocí LVM

  2. převést hex řetězec na binární a odeslat pomocí netcat

  3. Spuštění bash skriptu nebo binárního c na souborovém systému s možností noexec