FortgeschritteneBefehle

WinHex & X-Ways

Fortgeschrittene Befehle

 

Variablendeklarationen können in geschweiften Klammern eingeschlossen werden, so daß sie einen Block bilden, der als ganzes wiederholt eingesetzt werden kann. Beachten Sie aber, daß Blöcke in der aktuellen Implementation nicht verschachtelt werden dürfen. Eine Tilde ("~") kann als Platzhalter für eine spätere Ersetzung mit dem aktuellen Stand des Wiederholungszählers in Variablennamen verwendet werden. Die optionale numbering-Anweisung legt dabei fest, mit welcher Nummer die Zählung begonnen werden soll (standardmäßig mit Null).

 

         numbering  1

         {byte                                "Länge"

         string Länge                "String Nr. ~"

         } [10]

 

In diesem Beispiel werden die tatsächlichen Variablennamen in der Schablone "String Nr. 1", "String Nr. 2", ..., "String No. 10" lauten. Anstelle einer fix vorgegebenen Zahl von Wiederholungen (im Beispiel 10) können Sie auch „unlimited" angeben. In diesem Fall wiederholt WinHex den Block bis zum Ende der Datei. "ExitLoop" kann dazu verwendet werden, vorzeitig eine Wiederholungsschleife zu verlassen. "Exit" beendet die Abarbeitung einer Schablone ganz.

 

Mit dem Befehl "IfEqual" können zwei Ausdrücke miteinander verglichen werden. Die Vergleichsoperanden können zum einen beide numerisch sein, also jeweils entweder ein konstanter Wert in dezimaler Schreibweise, eine Integer-Variable oder mathematische Ausdrücke. Zum anderen werden Ausdrücke, die entweder als Text oder als hexadezimale Zeichenfolge angegeben werden, byteweise miteinander verglichen. Ausdrücke in Anführungszeichen werden als Zeichenketten interpretiert, Hexadezimalwerte werden durch ein vorangestelltes "0x" identifiziert. Mathematische Ausdrücke müssen von runden Klammern umschlossen sein.

 

         {ab byte                                Wert

         IfEqual Wert 1

                         ExitLoop

         EndIf

         } [10]

 

Jedes "IfEqual" muß mit einem "EndIf" abgeschlossen werden. Wenn die Ausdrücke gleich sind, wird der nachfolgende Teil der Schablone abgearbeitet. Ist ein "Else" angegeben, dann wird bei Ungleichheit der Teil nach diesem Schlüsselwort abgearbeitet. "IfEqual"-Anweisungen dürfen nicht verschachtelt sein. Für den Befehl "IfGreater" gelten dieselben Regeln wie für IfEqual, nur daß die Vergleichsbedingung erfüllt ist, wenn der erste Ausdruck größer ist als der zweite. Strings und Hex-Werte werden lexikographisch verglichen.

 

Um die Übersichtlichkeit einer Schablone zu verbessern, lassen sich Gruppen von Variablen auch visuell bilden, n, so daß die zugehörigen Editierfelder durch freien Raum im Dialogfenster voneinander getrennt erscheinen.:

 

         section "...Bezeichnung des Bereichs..."

         ...

         endsection

 

Die Anweisungen "section", "endsection" und "numbering" haben keinen Einfluß auf die aktuelle Position der Datenauswertung durch die Schablone.

 

Es gibt noch zwei weitere Befehle, die auch keine Variablen deklarieren, aber explizit benutzt werden, um die aktuelle Position zu manipulieren. Dies kann z. B. geschehen, um irrelevante Daten zu überspringen (Vorwärtsbewegung) oder um bestimmte Variablen mehrfach in Form von unterschiedlichen Datentypen erfassen zu können (Rückwärtsbewegung). Benutzen Sie die "move n"-Anweisung, um n Bytes von der aktuellen Position aus zu überspringen, wobei n auch negativ sein darf. "goto n" setzt die aktuelle Position auf n, einen absoluten (positiven) Offset basierend auf der Basisposition, auf die die Schablone angewandt wird. "gotoex n" springt zu einem absoluten Offset gemessen vom Anfang des Datenfensters an (z. B. vom Anfang einer Datei oder eines Datenträgers).

 

Das folgende Beispiel demonstriert den Zugriff auf 4 Bytes an Daten als 32-Bit-Integer und als eine Kette von 4 Hex-Werten:

 

         int32                "Seriennummer des Datenträgers (dezimal)"

         move -4

         hex 4                "Seriennummer des Datenträgers (hexadezimal)"