BVI

Deutsche Beschreibung


Der BVI (Binary-VI) ist ein Editor für Binärfiles. Seine Kommandos sind weitgehend an den Standard UNIX Editor VI(1) angelehnt. Der Bildschirm ist in einen hexadezimalen und einen ASCII-Bereich geteilt. Einige zusätzliche Kommandos wurden zugefügt, einige Kommandos adaptiert und einige Kommandos, die bei Binärfiles keinen Sinn machen, wurden weggelassen. Für eine Gesamtübersicht siehe Manual Page BVI(1).

Zusätzliche Kommandos

Eine wichtige Funktion für binäre Files ist das Suchen nach Hexcodes. Dafür gibt es analog zum '/' und '?' - Kommando zusätzlich das '\' und das '#' - Kommando.
Beispiel:
\1e f4 56 - Sucht die angegebene Bytefolge in vorwärts-Richtung
#34 5a a4 - Sucht Bytefolge rückwärts.

Die normalen Textsuchkommandos sind auch vorhanden, wobei zusätzlich ein Return, Linefeed oder NULL im Suchstring aufscheinen darf (\n \r oder \0).

Die Kommandos w, W, b, B (nächstes oder vorhergehendes Wort) wurden insoweit abgeändert, daß sie eher dem STRINGS(1) - Kommando entsprechen, also in einem Binärfile Textstrings suchen. Dabei sucht W und B nach Strings, die mit einem \0 oder \n enden, w und b sucht nach Strings, die mit einem beliebigen, nicht druckbaren Zeichen enden. Die Stringlänge beträgt 4 Zeichen, wobei mit ":set wordlength=x" die Stringlänge auf x Zeichen eingestellt werden kann.

Der Bildschirm ist in einen HEX und einen ASCII-Bereich aufgeteilt, wobei jederzeit mit der TAB - Taste von einem Bereich in den anderen gewechselt werden kann (auch im Eingabemodus). Es kann also bei der Eingabe zwischen normalen ASCII-Zeichen und Hex-Eingabe hin- und hergesprungen werden.

Am unteren Bildrand befindet sich eine Statusanzeige, welche die Adresse des Bytes, auf welchem der Cursor momentan steht, anzeigt. Außerdem wird das Byte in oktaler, hexadezimaler, dezimaler und ASCII-Repräsentation anzeigt. Die ASCII-Anzeige kann von DOS-Style (27 entspricht ^Z) auf UNIX-Style entsprechend Manual Page ASCII(7) umgeschaltet werden (27 entspricht SUB). Kommando ist ":set unixstyle". Die Statusanzeige kann mit ":set noshowmode" ausgeschaltet werden.

Regular Expressions

Für die Suchkommandos sowohl für Text als auch Hex sind Regular Expressions zulässig, wobei es die Zeichen ^ und $ für Zeilenanfang und Zeilenende nicht gibt. Die Kombination .* ist unzulässig, da sie sich auf jeden Fall auf das Ende des Files beziehen würde.

Zeilen

Da es in binären Files keine Zeilen gibt (die Darstellung der einzelnen Zeilen am Bildschirm hat keinen Bezug zum File) gibt es keinerlei zeilenorientierte Kommandos (dd, o, O, yy). Ein Kommando wie :s/XXX/UUU/g ändert somit das gesamte File. Zu beachten ist auch, daß :s/XX/UUUU/ nicht die beiden X durch vier U ersetzt, sondern die beiden den X folgenden Zeichen auch durch U überschrieben werden.

Editierkommandos

Da binäre Files häufig ausführbare Programme oder Datenbankfiles sind, bei denen Bytes nicht einfach an eine andere Adresse verschoben werden dürfen, sind Einfüge- und Löschkommandos (z.B. a, i, x) deaktiviert. Mit dem Kommando :set memmove können sie aktiviert werden.

Die Kommandos :a (append), :c (change) und :i (insert) können benutzt werden, um ein oder mehrere Bytes in ASCII, binärer, dezimaler, hexadezimaler oder oktaler Schreibweise einzugeben (a, b, d, h oder o). Es können mehrere (Bildschirm) Zeilen eingegeben werden. Das Kommando wird beendet, sobald eine Zeile, die nur aus einem Punkt besteht, eingegeben wird.

Beispiel:

:i b
1 1001 010101 1111
11111 1010 1 0 1
.
Zu beachten ist, daß kein Einzelwert den maximalen Byte-Wert (255) überschreiten darf, da sonst die Eingabe abgebrochen wird. Das Drücken der RETURN - Taste führt zu keinem "RETURN" - Zeichen in der Datei, im ASCII - Modus können allerdings die Sonderzeichen \n, \r, \t und \0 benutzt werden.

Yank und Put

Auch hier gilt eine etwas geänderte Funktion. Das y (yank) - Kommando ist allerdings ab Version 1.2.0 dem Vi angenähert:
5ySPACEkopiert 5 Zeichen in den Yank-Buffer
oüberschreibt an Cursor - Position die folgenden Zeichen mit dem Inhalt des Yank- oder Delete - Puffers
pfügt an der Cursor - Position den Inhalt des Yank- oder Delete - Puffers ein.
Pfügt den Inhalt des Yank- oder Delete - Puffers am Dateiendes an.

Das Kommando ":r filename" fügt das angegebene File nicht an der Cursor- Position sondern am Dateiende an.

Adressen

Das Kommando nG führt nicht zur n. Zeile, sondern zum n. Byte. Die Eingabe der Nummer wird dezimal interpretiert. Um eine Adresse hexdezimal angeben zu können, kann g eingegeben werden. Es erscheint ein Prompt in der Statuszeile, bei dem eine hexadezimale Eingabe erfolgen kann. Das erste Byte hat Adresse 0.
Die Anzeige der Adressen kann mit einem Offset versehen werden (:set offset=256), beispielsweise um für .COM Files in DOS einen Beginn bei Adresse 100Hex anzuzeigen. Wird ein offset=1 angegeben, so ist hat das erste Byte Adresse 1. Das G - Kommando berücksichtigt den Offset. Im Gegensatz dazu zeigt das :f - Kommando immer die Ordnungszahl des Bytes an, beginnend mit 1 ohne Berücksichtigung des Offsets.

Bitweise Kommandos

Um Manipulationen auf Bit-Ebene durchführen zu können, stehen folgende Kommandos zur Verfügung:
:rl nRotiert Bits links n ist eine Zahl zwischen 1 und 7
:rr nRotiert Bits rechts
:sl nSchiebt Bits links
:sr nSchiebt Bits rechts
:and iUnd Verknüpfung i ist eine Zahl zwischen 0 und 255
:or iOder Verknüpfung
:xor iExklusiv-oder Verknüpfung
:not Negiert Bytewert
:neg Zweier-Komplement
Wird kein Bereich angegeben, so bezieht sich die Operation auf die gesamte Datei. Es können zwei Adressen in den üblichen Schreibweisen angegeben werden. Normalerweise wird dezimale Eingabe erwartet, bei führender 0 werden die Adressen Hexadezimal interpretiert.
Der Wert i für die logische Verknüpfung kann dezimal, hexadezimal, oder mit führendem B in binärer Schreibweise angegeben werden. Auch bei Eingabe von genau acht 0 und 1 Werten wird der Byte - Wert binär interpretiert.
Beispiel:
:100,500and 01A RETURN
:03FA,01000or 00001000 RETURN
:.rr 3 RETURN
:'a,$sl 1 RETURN
Back to the top
Page updated: October 13th 2019 by Gerhard Bürgmann, Purkersdorf/Austria
Have a look at "webmaster.puon.at"