Konzepte systemnaher Programmierung

Skript zum Bestimmen der Instruktionsadressen

Beim Debuggen ist es oft nützlich, die Instruktionsadressen eines Ninja- bzw. Assemblerprogramms zu ermitteln. Weil Labels, Kommentare und Leerzeilen dabei keinen Einfluß haben, sind die Zeilennummern allein nicht hilfreich. Dieses Skript erhält die Assemblerdatei als Eingabe und gibt es mit vorangestellten Instruktionsadressen aus.

Einbinden der Bigint-Bibliothek

Die Compileroption -I (groß ieh) fügt das folgende Verzeichnis den Suchpfaden für Includedateien hinzu. Die Verwendung könnte -Ibigint/build/include/ lauten.

Die Linkeroption -L fügt das folgende Verzeichnis den Suchpfaden für Bibliotheksdateien hinzu. Die Verwendung könnte -Lbigint/build/lib/ lauten.

Eine Meldung wie undefined reference to `function' ist eine Fehlermeldung des Linkers und besagt, daß die referenzierte Funktion "function" nicht gefunden wurde.
Die Linkeroption -l (klein ell) fügt die folgende Bibliotheksdatei zu den Dateien hinzu, die zum Finden solcher undefinierter Symbole durchsucht werden. Die Namen solcher Bibliotheksdateien haben das Präfix lib und das Suffix .a; beide werden bei der Option nicht angegeben. Die Verwendung für die Datei libbigint.a lautet also -lbigint.
Der Linker bindet die Objekte ein (globale Variablen und Funktionen), die er "an dieser Stelle" benötigt. Die Option kann daher nicht sinnvoll "vorne" bei den anderen Optionen verwendet werden (weil es dort noch keine undefinierten Objekte gibt), sondern muß am Ende stehen, weil "dort" die "fehlenden" Objekt bekannt sind und eingebunden werden. (Bei wechselseitigen Abhängigkeiten kann es sogar nötig sein, dieselben Bibliotheken mehrfach anzugeben. Beispiel: main ruft die Funktion one_a auf; libone.a enthält die Funktionen one_a und one_b, libtwo.a enthält two_a. one_a ruft two_b auf, diese ruft one_b auf. Die benötigten Bibliotheksangaben des Aufrufs sind -la -lb -la.)

Für weitere Informationen siehe zum Beispiel das Buch "Expert C programming – Deep C secrets" von Peter van der Linden.

Syntaxhighlighting für Ninja

Da das Editieren von Ninja-Quelltexten ohne Syntaxhighlighting recht schwierig sein kann, habe ich eine Syntaxdatei für den Editor vim geschrieben, die dieses Problem löst. Die Datei wird unter dem Namen ˜/.vim/syntax/ninja.vim gespeichert. Das Syntaxhighlighting läßt sich anschließend durch eingabe von ":syntax on" und ":set syntax=ninja" aktivieren.

Oft ist der Editor so eingerichtet, daß Highlighting sofort beim Öffnen einer Datei eingeschaltet wird. Damit das auch für Ninja-Dateien funktioniert, habe ich eine weitere Datei geschrieben, die unter dem Namen ˜/.vim/filetype.vim abgespeichert wird. Dadurch wird die vim-Option 'filetype' automatisch auf "ninja" gesetzt.

Um auch das Syntaxhighlighting automatisch einzuschalten, schreibe man "syntax on" in die Datei ˜/.vimrc .