BinÀrdateneditor: GNU poke 2.0 greift auf laufende Prozesse zu
(Bild: Gerd Altmann, Public Domain (Creative Commons CCo))
Neben dem Zugriff ĂŒber eine Prozess-ID bietet die zweite Hauptversion des interaktiven Editors eine Unterteilung von I/O-Bereichen.
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.
(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 [1]. Der Name des im MĂ€rz 2021 erstmals veröffentlichten Tools [2] dĂŒrfte als Reminiszenz an den Befehl POKE zu verstehen sein, der in der Programmiersprache Basic zum Schreiben eines Werts an einer Speicheradresse dient.
Unterteilte Speicherbereiche
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.
Am offenen Herzen
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 [3]. Der Sourcecode findet sich im Git-Repository in der Savanne von GNU [4]. Die Dokumentationsseite bietet die poke-Anleitung [5] 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 [6])
URL dieses Artikels:
https://www.heise.de/-6341493
Links in diesem Artikel:
- http://www.jemarch.net/poke-1.0-manual/poke.html#The-Poke-Language
- https://www.heise.de/news/Binaerdateien-Editor-GNU-poke-erscheint-als-stabile-Version-1-0-5067598.html
- https://jemarch.net/poke-2.0-relnotes.html
- https://git.savannah.gnu.org/cgit/poke.git
- http://www.jemarch.net/poke-1.0-manual/
- mailto:rme@ix.de
Copyright © 2022 Heise Medien