Binärdateneditor: GNU poke 2.0 greift auf laufende Prozesse zu

Neben dem Zugriff über eine Prozess-ID bietet die zweite Hauptversion des interaktiven Editors eine Unterteilung von I/O-Bereichen.

In Pocket speichern vorlesen Druckansicht 14 Kommentare lesen
Verschlüsselung, Binär, Daten, Kryptographie

(Bild: Gerd Altmann, Public Domain (Creative Commons CCo))

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag

Knapp ein Jahr nach der ersten stabilen Version ist nun GNU poke 2.0 erschienen. Der interaktive Editor zum Bearbeiten von Binärdateien bringt im aktuellen Release zahlreiche meist kleinere Neuerungen mit. Zu den größeren Ergänzungen gehört, dass er I/O-Bereiche in Unterbereiche unterteilen und auf laufende Prozesse zugreifen kann.

poke arbeitet kommandozeilenbasiert nach dem REPL-Prinzip (Read Eval Print Loop). Das Tool bringt seine eigene Programmiersprache mit, um Datenstrukturen zu beschreiben und zu bearbeiten. Auf der Kommandozeile bietet es zwei Arten von Befehlen: Reguläre Kommandos sind in der poke-eigenen Programmiersprache geschrieben, während Punktbefehle, die mit . starten, in C verfasst sind.

Neben dem Anzeigen der Hexadezimalwerte ermöglicht GNU poke einen Einblick in Datenstrukturen.

(Bild: GNU poke auf jemarch.net)

Daneben gibt es Ausdrücke und Anweisungen. Erstere erzeugen eine interaktive Ausgabe. Anweisungen geben keine direkte Rückmeldung, können aber beispielsweise über printf ihre eigenen Ausgaben erzeugen. Komplexere Aufgaben lassen sich als Funktionen schreiben.

Details zur Programmiersprache, die im Gegensatz zum interaktiven Editor mit großem "P" geschrieben wird, lassen sich der Dokumentation entnehmen. Der Name des im März 2021 erstmals veröffentlichten Tools dürfte als Reminiszenz an den Befehl POKE zu verstehen sein, der in der Programmiersprache Basic zum Schreiben eines Werts an einer Speicheradresse dient.

Version 2.0 führt den Punktbefehl .sub ein, um einen Unterbereich eines I/O-Bereichs zu erstellen. Folgendes Beispiel aus den Release Notes erstellt einen Unterbereich mit einem Offset von 2:

(poke) .mem scratch
(poke) .info ios
  Id   Type     Mode   Bias           Size           Name        
* #0   MEMORY   rw     0x00000000#B   0x00001000#B   *scratch*
(poke) .sub #0, 2, 16, lala
(poke) .info ios
  Id   Type     Mode   Bias           Size           Name                 

* #1   SUB      rw     0x00000002#B   0x00000010#B   sub://0/0x0/0x10/lala
  #0   MEMORY   rw     0x00000000#B   0x00001000#B   *scratch*

Beim Schreiben dieser Meldung fand sich in der poke-Dokumentation noch keine Beschreibung des .sub-Befehls.

Ebenfalls neu ist der Punktbefehl .proc, der Zugriff auf einen laufenden Prozess gibt und dafür einen neuen I/O-Bereich erstellt. Er funktioniert allerdings wohl nur in GNU/Linux-Systemen:

(poke) .proc 30244
(poke) .info ios
  Id   Type   Mode   Bias           Size                   Name          
* #0   PROC   rw     0x00000000#B   0xffffffffffffffff#B   pid://30244

Mit dem ergänzenden Parameter /m erstellt der .proc-Befehl zusätzliche Unterbereiche für den Zugriff auf VM-Bereiche des Prozesses. Im Zuge des Zugriffs auf Prozesse und deren VM-Bereiche bekommt der dump-Befehl eine Ergänzung: Er zeigt ?? für Bytes an, die nicht lesbar sind. Das kann beispielsweise beim Zugriffsversuch auf VM-Bereiche von Prozessen passieren, die nicht gemapped sind.

Als kleine Komfortfunktion lässt sich neuerdings die Erscheinungsweise des Editors je nach Hintergrund konfigurieren: --style-dark ist die Standardeinstellung und zielt auf dunkle Konsolenfenster, wogegen --style-bright auf helle Hintergründe ausgelegt ist.

Weitere Neuerungen lassen sich den Release Notes entnehmen. Der Sourcecode findet sich im Git-Repository in der Savanne von GNU. Die Dokumentationsseite bietet die poke-Anleitung in zahlreichen Formaten von reinem Text über HMTL und TeX bis zu PDF. Nach wie vor bietet die poke-Site inklusive der Dokumentation derzeit leider keine HTTPS-Verbindung an.

(rme)