GNU/Linux >> Linux Esercitazione >  >> Linux

Patchare un binario con Dd?

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

Linux
  1. Traccia del kernel con trace-cmd

  2. Utilizzando Notifica-Invia con Cron?

  3. controllando se un binario è stato compilato con -static

  4. convertire una stringa esadecimale in binario e inviarla con netcat

  5. Esecuzione di uno script bash o di un binario c su un file system con l'opzione noexec

15 Comando Linux ps con esempi

Comandi Nmap con esempi

Programmazione con cron &At

Comando della cronologia con esempi

Microservizi con Python3

Autorità di certificazione con OpenSSL