GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Eine Binärdatei mit Dd patchen?

Ich habe dieses Zitat (unten) mehrmals gelesen, zuletzt hier, und bin immer wieder verwirrt darüber, wie dd funktioniert kann verwendet werden, um alles zu patchen geschweige denn ein Compiler:

Das Unix-System, das ich vor 30 Jahren in der Schule benutzte, war in Bezug auf RAM und Festplattenspeicher sehr begrenzt. Insbesondere /usr/tmp Dateisystem war sehr klein, was zu Problemen führte, wenn jemand versuchte, ein großes Programm zu kompilieren. Natürlich sollten Studenten sowieso keine „großen Programme“ schreiben; Große Programme waren typischerweise Quellcodes, die von „irgendwo“ kopiert wurden. Viele von uns haben /usr/bin/cc kopiert nach /home/<myname>/cc , und benutzte dd um die Binärdatei so zu patchen, dass sie /tmp verwendet statt /usr/tmp , was größer war. Natürlich verschlimmerte dies das Problem nur noch – der von diesen Kopien belegte Speicherplatz spielte damals eine Rolle, und jetzt /tmp füllten sich regelmäßig und hinderten andere Benutzer daran, ihre Dateien überhaupt zu bearbeiten. Nachdem sie herausgefunden hatten, was passiert war, führten die Systemadministratoren einen chmod go-r /bin/* /usr/bin/* durch wodurch das Problem „behoben“ und alle unsere Kopien des C-Compilers gelöscht wurden.

(Hervorhebung von mir)

Der dd Die Manpage sagt nichts über das Patchen aus und ich glaube nicht, dass sie dazu umfunktioniert werden könnte.

Könnten Binärdateien wirklich mit dd gepatcht werden? ? Hat das eine historische Bedeutung?

Akzeptierte Antwort:

Lass es uns versuchen. Hier ist ein triviales C-Programm:

#include <stdio.h>
int main(int argc, char **argv) {
    puts("/usr/tmp");
}

Wir werden das in test einbauen :

$ cc -o test test.c

Wenn wir es ausführen, gibt es „/usr/tmp“.

aus

Lassen Sie uns herausfinden, wo „/usr/tmp ” ist in der Binärdatei:

$ strings -t d test | grep /usr/tmp
1460 /usr/tmp

-t d gibt den Offset dezimal in die Datei jeder gefundenen Zeichenfolge aus.

Lassen Sie uns nun eine temporäre Datei mit nur „/tmp

Linux
  1. JQ-Befehl in Linux mit Beispielen

  2. Verwenden Sie Notify-Send mit Cron?

  3. Laden Sie Dateien als ASCII oder binär mit FTP hoch

  4. Überprüfen, ob eine Binärdatei mit -static kompiliert wurde

  5. Ausführen eines Bash-Skripts oder einer C-Binärdatei auf einem Dateisystem mit der Option noexec

15 Linux-PS-Befehl mit Beispielen

Nmap-Befehle mit Beispielen

Terminplanung mit cron &At

Verlaufsbefehl mit Beispielen

Microservices mit Python3

Zertifizierungsstelle mit OpenSSL