Hochschule Augsburg, Fakultät für Informatik, http://www.hs-augsburg.de/~hhoegl
Update: 2017-10-05

Systemnahen Programmierung


Schnelle Navigation

|| Inhalt | Übungsaufgaben | Klausuren | Literatur ||

|| 64Bit | Debuggen mit GDB | ReST | Linux | No-Root | Textdateien | Textbrowser | Hexdump | Quiz ||


Sie bekommen die Beispielprogramme von http://hhoegl.informatik.hs-augsburg.de:3000/hhoegl/sysprog mit dem git Kommando:

git clone http://hhoegl.informatik.hs-augsburg.de:3000/hhoegl/sysprog.git

Diese Veranstaltung ist eine Einführung in die Assembler- und C-Programmierung für Bachelor-Studenten der Informatik. Wir werden dazu das schöne Skript in englischer Sprache von Jonathan Bartlett -- Programming from the ground up - "PGU" - verwenden, Sie finden eine von mir nach HTML übertragene Variante unter

http://hhoegl.informatik.hs-augsburg.de/sysprog/pgu/

Das Skript ist unter der Open-Source Lizenz GNU Free Documentation License (GFDL) erschienen, man darf es also jederzeit weiter verbreiten.

Beachten Sie auch die für uns wichtigen Anhänge in diesem Buch:

  • Anhang B: Einige x86 Instruktionen
  • Anhang C: Einige Linux Systemaufrufe
  • Anhang D: ASCII Tabelle
  • Anhang F: Der GDB Debugger

(Das Original von 2003 findet man hier: <http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-lettersize.pdf>`_).

Die Veranstaltung hat 5 SWS bzw. 6 Credit Points. Da ein CP genau 30 Arbeitsstunden entspricht, liegt der gesamte erwartete Zeitaufwand für die Studenten bei immerhin 180 Stunden.

Tipps

64-Bit Rechner

Auf Rechnern mit 64-Bit Betriebssystem sollte man den GNU Assembler und Linker in den 32-Bit Modus schalten. Beim Assembler wählt man --32 und beim Linker -m elf_i386, so wie in folgendem Beispiel:

as -g --32 -al=main.lst -o main.o main.s
ld -m elf_i386 -o main main.o

Falls man gegen die libc linken moechte, muss man ausserdem die Bibliotheken im 32-Bit Format installieren. Das Paket heisst "ia32-libs". Ein Makefile, das Programme und Bibliotheken im 32-Bit Modus auf 64-Bit Rechnern erzeugt ist in sysprog/pgu/prog-8/Makefile-64.


Einige haben nachgefragt, ob es weiterfuehrende Informationen zum x86 mit 64-Bit Architektur gibt. Eine sehr schoene Beschreibung habe ich in folgendem 46-seitigen Text gefunden:

https://www.cs.cmu.edu/~fp/courses/15213-s07/misc/asm64-handout.pdf

Die beiden Autoren Bryant und O'Hallaron sind auch die Autoren des beeindruckenden Buches "Computer Systems: A Programmers Perspective" (CSAPP), siehe http://csapp.cs.cmu.edu. Es enthält jede Menge interessante Themen zu system- und maschinennaher Programmierung, viel mehr als wir in unserer Veranstaltung machen können.

GNU Debugger gdb

Den GNU debugger gdb starten Sie mit gdb --tui <Programm>. Das <Programm> ist der Name der ausführbaren Datei.

Damit Sie in gdb den Quelltext des Programmes sehen können, müssen Sie es mit der Option -g übersetzen.

In folgendem Beispiel erzeugt die -g Option die "Debug Informationen" für den gdb. Die -al=main.lst Option erzeugt das Listing main.lst.

as -g -al=main.lst -o main.o main.s

Eine kurze Anleitung zur Technik des Debugging finden Sie in Erster Kontakt mit dem GDB . Der Text verwendet das "maximum" Beispiel aus PGU, Kapitel 3. Später sollte man sich noch den Text GDB für Fortgeschrittene durchlesen.

Eine Zusammenfassung der wichtigsten GDB Kommandos für die SysProg-Veranstaltung ist im Repository der Beispiele sysprog.git (siehe oben) im Ordner gdb_anleitung (2017-10-23).

Restructured Text (reST)

Die Lösungen zu den Übungsaufgaben geben Sie im reST Format ab. Eine kurze Anleitung ist hier:

http://hhoegl.informatik.hs-augsburg.de/hhweb/etc/uebungen-mit-rst.html

Sie geben sowohl die reST Datei, z.B. uebung1.rst und die von Ihnen mit rst2html übersetzte Datei uebung1.html ab. Packen Sie alles in eine ZIP Datei, z.B. uebung1.zip. Die Dateien sind in einem Verzeichnis untergebracht, das genau so heisst wie das Archiv:

uebung1/
       uebung1.rst
       uebung1.html
       bild.jpg
       main.s
       ...

Mit rst2html sollten Sie ohne Fehler eine HTML Datei bekommen. Das Kommando:

rst2html --language=de uebung1.rst uebung1.html

sollte ohne schlimme Fehlermeldungen ausgeführt werden.

Quelltextdateien sollten Sie mit

.. include:: main.s
   :code: asm
   :number-lines:

in Ihre .rst Datei einbauen.

Tipps zum Arbeiten mit Linux

  • Zum fundierten Einarbeiten in Linux empfehle ich die unter einer freien Lizenz erschienene Schulungsunterlage "Linux Essentials" vom Linux Professional Institute (LPI):

    https://www.tuxcademy.org/media/lxes/

    Sie können dort das 264-seitige Handbuch lxes-de-manual-cc.pdf im PDF Format kostenlos herunterladen.

    Eine interessante Textsammlung zu verschiedenen UNIX-Themen wie Vi, Shell, Makefile, C und GDB bietet auch folgende Seite von Norman Matloff:

    http://heather.cs.ucdavis.edu/~matloff/unix.html

    Es lohnt sich, dort ein wenig zu stöbern!

  • Gewöhnen Sie sich an, nur im Terminal-Fenster zu arbeiten. Unsere häufigsten Kommandos sind:

    • Navigation im Filesystem (cd, ls, mkdir). Es ist keine gute Idee, das mit einem grafischen Filebrowser zu erledigen.
    • Dateien löschen (rm)
    • Editieren von Dateien (vim, nano, pico)
    • Aufrufen von make, eventuell mit make Targets, z.B. "make clean"
    • Starten des Debuggers
    • Gelegentliche Administrations-Aufgaben (sudo ...), wie zum Beispiel dem Installieren von Paketen

Nicht als Administrator (root) arbeiten

Arbeiten Sie beim Programmieren NICHT als Root! Installieren Sie am besten das Paket "sudo" und fügen Sie in /etc/sudoers die Zeile

stud    ALL=(ALL:ALL) ALL

hinzu.

Schreiben von Textdateien

Beispiele für Textdateien: reST Dokument, Assembler Quelltext, Makefile.

  • Ich empfehle den Vim Editor!

  • Gewöhnen Sie sich daran, den Text nicht breiter als 80 Zeichen zu schreiben. Ein wichtiger Grund dafür ist, dass Braille Blindenschriftzeilen nicht mehr als 80 Zeichen darstellen können. Breite Bildschirme verleiten einen leider gerne, sehr lange Zeilen mit 100 bis 150 Zeichen zu schreiben. Die meisten Editoren können so eingestellt werden, dass Sie automatisch längere Zeilen umbrechen.

    In Vim verwende ich z.B. in ~/.vimrc das Kommando

    set colorcolumn=80

    das mir in Spalte 80 einen vertikalen roten Balken zeigt, über den man nicht schreiben sollte.

  • Um sich in Vim einzuarbeiten, beginnen Sie am besten mit dem Programm vimtutor. Geben Sie vimtutor [RETURN] auf der Kommandozeile ein und befolgen Sie die Anweisungen, die Sie danach am Bildschirm sehen.

Textbrowser

  • Ein Textbrowser ist praktisch, wenn man schnell einen Text lesen will. Das Standard-Werkzeug dafür ist less, das man so anwendet:

    less text.rst

    Man kann sich in ~/.bashrc einen Alias einrichten, z.B.:

    alias m="less"

    Damit kann man dann etwas kürzer m text.rst schreiben.

Hexdump/Hex Editor

  • od
  • xxd
  • hexedit

Quiz, Quickies

Q1 Schreiben Sie alle Adressierungsarten hin, um das dritte Element (34) im folgenden Array in das Register eax zu laden.

data_items:
    .long   3, 67, 34, 12, 17, 0

1. movl _____________, %eax

2. movl ___________________
   movl _____________, %eax

3. movl ___________________
   movl _____________, %eax

4. movl ___________________
   movl _____________, %eax

Q2 Schreiben Sie die noch fehlende Funktion in sysprog/tests/timespow/.

Literatur

Alle folgenden Bücher und Tutorials sind unter einer freien Lizenz erschienen. Das heisst, Sie dürfen Sie jederzeit auf Ihren Rechner kopieren und auch weiterverteilen.

Nun noch ein paar gewöhnliche Bücher, die man mit Geld kaufen kann:

Vergessen Sie bitte nicht, dass Sie als Studenten der Hochschule Augsburg über Safari Books Online gratis Zugriff auf eine riesige Menge an Informatik-Fachbüchern haben. Darunter sind auch viele Lehrbücher über Assembler-Programmierung und der Sprache C.

SysProg (zuletzt geƤndert am 2017-10-23 20:53:23 durch HubertHoegl)