computerseite-spezial.de

handverlesene Infos zu Linux, FreeBSD und OpenSolaris

  • Full Screen
  • Wide Screen
  • Narrow Screen
  • Increase font size
  • Default font size
  • Decrease font size
Sie sind hier: Startseite Besondere Programme Vim als Hexeditor - Binärdateien bearbeiten

Vim als Hexeditor - Binärdateien bearbeiten


Dieser Beitrag ist erschienen am 13. Juni 2009 bei zInformatik (Link) / Veröffentlichung mit freundlicher Genehmigung des Autors / Autor: Marcel Jakobs (zimon) / Lizenz: alle Rechte liegen beim Autor, Details sind beim Autor zu erfragen.

Wenn Sie diesen Artikel weiterverwenden möchten, beachten Sie bitte die Bedingungen des Autors. Vielen Dank.


Vim als Hexeditor - Binärdateien bearbeiten

von Marcel Jakobs


Vim lässt sich selbstverständlich auch als Hexeditor nutzen. Dafür wird (normalerweise) gleichzeitig mit Vim das kleine Programm xxd installiert. Dieses sollte also auf jedem System zu finden sein, auf dem Vim installiert ist.

Wenn man Binärdateien öffnet, sollte man die Option -b von Vim nutzen, was den Binärmodus anschaltet:

vim -b datei.bin

xxd kann nun mittels eines Filters auf die geöffnete Datei angewendet werden:

:%!xxd

Damit wird aus dem folgenden Inhalt

Ein Test

die Hex-Repräsentation

00000000: 4569 6e20 5465 7374 0a                   Ein Test.

Die Zahl vor dem Doppelpunkt ist das Offset des ersten Zeichens in der Zeile (in hexadezimaler Schreibweise), also das wievielte Zeichen es ist. Danach folgt die hexadezimale Repräsentation der Zeile bestehend aus (bis zu) 16 Bytes. Danach sieht man die ASCII-Repräsentation der Zeile.
Nun kann man die hexadezimale Repräsentation beliebig ändern, wobei jedoch die ASCII-Repräsentation so bleibt, wie sie war. Sie wird nicht automatisch geändert.

Wenn man mit der Bearbeitung fertig ist, kann man xxd mit der Option -r aufrufen um wieder zur normalen Ansicht zurück zu kehren:

:%!xxd -r

Für die xxd Kommandos kann man sich nun Mappings erstellen. Dafür fügt man die beiden folgenden Zeilen in die ~/.vimrc ein:

map <leader>hex :%!xxd<CR>
map <leader>nhex :%!xxd -r<CR>

Nun kann man mittels \hex in den “Hexmodus” wechseln und mit \nhex wieder zurück. (Den Leader kann man z.B. mit der Zeile let mapleader="," auf , setzen, so dass man die Befehle mit ,hex und ,nhex aufrufen kann)

Das Plugin hexman
Das Bearbeiten von Dateien in der hexadezimalen Repräsentation wird durch das Plugin hexman erleichtert. Nachdem man die Datei hexman.vim ins Pluginverzeichnis (~/.vim/plugin) kopiert hat, kann man einfach folgende Befehle nutzen (Leader wird hier als \ angenommen):

  • \hm - wechselt zwischen Hexmodus und normalem Modus
  • TAB - bewegt den Cursor zum Anfang des nächsten ASCII Zeichens (da ein Zeichen ja aus 2 Hex-Ziffern besteht)
  • \hd - löscht das Zeichen unter dem Cursor
  • \hi - fügt ein ASCII-Zeichen vor dem Cursor ein
  • \hg - Springt zu einem Offset

In der Statuszeile wird jeweils das aktuelle Offset (des Cursors) in dezimaler und hexadezimaler Schreibweise angezeigt. In der ASCII-Repräsentation wird die Spalte hervorgehoben, in der sich der Cursor in der Hex-Repräsentation befindet. Wenn man die Befehle des Plugins zum Ändern von Werten benutzt, wird die ASCII-Repräsentation automatisch aktualisiert, so dass sie immer mit den Hexadezimalwerten überein stimmt.

Auch hier ist ein Mapping vorteilhaft, welches einem das Ändern eines Zeichens mittels \hc erlaubt:

map <leader>hc <leader>hd <leader>hi 
You are here: