13888
Kommentar:
|
← Revision 173 vom 2019-11-29 10:01:35 ⇥
16430
|
Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
Zeile 4: | Zeile 4: |
========================== Systemnahen Programmierung ========================== | Hochschule Augsburg, Fakultät für Informatik, http://www.hs-augsburg.de/~hhoegl | URL: http://hhoegl.informatik.hs-augsburg.de/hhweb/sysprog/index.html |
| Hochschule Augsburg, Fakultät für Informatik, Prof. Högl, http://www.hs-augsburg.de/~hhoegl | URL: http://hhoegl.informatik.hs-augsburg.de/hhwiki/SysProg |
Zeile 11: | Zeile 7: |
| Update: 2017-10-05 | | Letzter Update: 2019-10-22 ========================= Systemnahe Programmierung ========================= |
Zeile 22: | Zeile 22: |
**Neu:** * Beispiel `Pointer-in-C <http://hhoegl.informatik.hs-augsburg.de/sysprog/Pointer-in-C>`_ vom 22.11.2019 * `Tabelle der Sprungbefehle <http://hhoegl.informatik.hs-augsburg.de/sysprog/jump-tabelle.png>`_ * `Übungen mit Markdown schreiben <http://hhoegl.informatik.hs-augsburg.de/sysprog/Markdown-Anleitung>`_ * Fetch-Decode-Excute Zyklus http://hhoegl.informatik.hs-augsburg.de/sysprog/img/f-d-e.svg |
|
Zeile 26: | Zeile 35: |
|| `Inhalt <inhalt.html>`_ | `Beispielprogramme <http://hhoegl.informatik.hs-augsburg.de:3000/hhoegl/sysprog>`_ | `Übungsaufgaben <Uebungen/index.html>`_ | `Klausuren <Klausuren/>`_ | Literatur_ || || 64Bit_ | Debuggen_ | ReST_ | Linux_ | No-Root_ | Textdateien_ | Textbrowser_ | Hexdump_ | Quiz_ || Sie bekommen die Beispielprogramme von http://hhoegl.informatik.hs-augsburg.de:3000/hhoegl/sysprog mit dem Kommando:: git clone ssh://git@hhoegl.informatik.hs-augsburg.de:2222/hhoegl/sysprog.git |
|| `Inhalt <SysProgInhalt>`_ | `Klausuren <http://hhoegl.informatik.hs-augsburg.de/sysprog/Klausuren>`_ | Literatur_ | `Übungsaufgaben <SysProgUebungen>`_ || || `64-Bit Rechner`_ | `Debuggen mit GDB`_ | ReST_ | Linux_ | No-Root_ | Textdateien_ | Textbrowser_ | Hexdump_ | `Syscalls 64-Bit <https://filippo.io/linux-syscall-table>`_ || `Syscalls 32-Bit <https://syscalls.kernelgrok.com>`_ || `Rust <http://hhoegl.informatik.hs-augsburg.de/sysprog/Rust/>`_ || `64-Bit "Brennpunkt" <http://hhoegl.informatik.hs-augsburg.de/sysprog/x86-64/main.html>`_ .. `pot.c <attachment:SysProg/pot.c>`_ ---- Moodle-Kurs: https://moodle.hs-augsburg.de/course/view.php?id=2806 ---- Sie bekommen die Beispielprogramme von unserem Gitlab mit dem ``git`` Kommando:: git clone https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog ---- |
Zeile 40: | Zeile 59: |
- "PGU" - verwenden, Sie können es frei `herunterladen <http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-lettersize.pdf>`_ (2003, 248 Seiten) und verteilen, da es unter der Open-Source Lizenz `GNU Free |
- "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 |
Zeile 44: | Zeile 65: |
erschienen ist. Beachten Sie auch die für uns wichtigen Anhänge in diesem Buch: |
erschienen, man darf es also jederzeit weiter verbreiten. Beachten Sie auch die für uns wichtigen Anhänge in diesem Buch: |
Zeile 48: | Zeile 70: |
Zeile 50: | Zeile 71: |
Zeile 52: | Zeile 72: |
Zeile 54: | Zeile 73: |
(Das Original von 2003 findet man hier: <http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-lettersize.pdf>`_). Zusaetzliche Themen, die wir bearbeiten, sind: * Die x86-64 Architektur https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog/tree/master/x86-64 * Exploits https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog/tree/master/Exploit |
|
Zeile 73: | Zeile 105: |
.. _64Bit: **64-Bit Rechner** |
.. _64-Bit Rechner: **64-Bit Rechner und 32-Bit Programme** |
Zeile 84: | Zeile 116: |
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``. |
Falls man gegen die libc linken möchte, muss man ausserdem die Bibliotheken im 32-Bit Format installieren. Das geht z.B. auf einem Mint Linux 18.2 mit:: sudo apt install gcc-multilib libc6-dev-i386 Alle Beispielprogramme ``im sysprog.git`` Repository werden als 32-Bit Programme kompiliert. Ich nehme an, dass mittlerweile alle unter einem 64-Bit Linux arbeiten und fuer den Kurs Programme im 32-Bit Modus erstellen. .. Man kann auch "ia32-libs" installieren. Das installiert aber viel mehr Pakete. |
Zeile 91: | Zeile 131: |
Einige haben nachgefragt, ob es weiterfuehrende Informationen zum x86 mit 64-Bit Architektur gibt. Eine sehr schoene Beschreibung habe ich in folgendem |
**64-Bit Programme auf x86-64 Architektur** Einige haben nachgefragt, ob es weiterführende Informationen zum x86 mit 64-Bit Architektur gibt. Eine sehr schöne Beschreibung habe ich in folgendem |
Zeile 95: | Zeile 137: |
https://www.cs.cmu.edu/~fp/courses/15213-s07/misc/asm64-handout.pdf | https://www.cs.cmu.edu/~fp/courses/15213-s07/misc/asm64-handout.pdf |
Zeile 99: | Zeile 141: |
siehe http://csapp.cs.cmu.edu. Es enthaelt jede Menge interessente Themen zu | siehe http://csapp.cs.cmu.edu. Es enthält jede Menge interessante Themen zu |
Zeile 101: | Zeile 143: |
Veranstaltung machen koennen. .. _Debuggen: |
Veranstaltung machen können. Von Ed Jorgensen gibt es das freie Buch *x86-64 Assembly Language Programming with Ubuntu*, siehe http://www.egr.unlv.edu/~ed/x86.html. Mittlerweile (12/2018) gibt es dazu auch einen Ordner im sysprog.git Repository: https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog/tree/master/x86-64. Siehe darin den Text ``main.rst``. .. _Debuggen mit GDB: |
Zeile 124: | Zeile 175: |
mit dem GDB <gdb/gdb.html>`_ . Der Text verwendet das "maximum" Beispiel aus PGU, Kapitel 3. Noch ein paar andere Referenzen: * GDB für Fortgeschrittene: `<gdb/gdb-2.html>`_ * Zusammenstellung von GDB Kommandos: `<gdb/gdb-commands.txt>`_ (Autor?) * Eine andere Zusammenstellung von GDB Kommandos: `<gdb/gdbnotes.txt>`_ * `GDB commands by function <http://web.cecs.pdx.edu/~jrb/cs201/lectures/handouts/gdbcomm.txt>`_ (lokal: `<gdb/gdbcomm.txt>`_) * Selber definierte GDB Funktionen: `<gdb/gdbinit.txt>`_ * Im sysprog git Repositorium gibt es eine weitere Anleitung im Verzeichnis ``sysprog/gdb``. |
mit dem GDB <http://hhoegl.informatik.hs-augsburg.de/sysprog/gdb/gdb.html>`_ . Der Text verwendet das "maximum" Beispiel aus PGU, Kapitel 3. Später sollte man sich noch den Text `GDB für Fortgeschrittene <http://hhoegl.informatik.hs-augsburg.de/sysprog/gdb/gdb-2.html>`_ 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 <http://hhoegl.informatik.hs-augsburg.de/sysprog/gdb_anleitung/gdb_anleitung.html>`_ (2017-10-23). Es gibt auch eine `Übersicht der Kommandos <http://hhoegl.informatik.hs-augsburg.de/sysprog/gdb_anleitung/quickref.pdf>`_ (Okt 2019). |
Zeile 147: | Zeile 186: |
**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 nur die reST Datei, z.B. ``uebung1.rst`` ab. Falls Ihre Abgabe aus mehreren Dateien besteht, packen Sie diese in eine ZIP Datei, z.B. ``uebung1.zip``. Die Dateien sind in einem Verzeichnis untergebracht, das genau so heisst wie das Archiv:: uebung1/ loesung1.rst bild.jpg ... Prüfen Sie, ob sich Ihr Text auch mit ``rst2html`` ohne Fehler in eine HTML Datei umwandeln lässt. Das Kommando:: rst2html --language=de text.rst text.html sollte ohne schlimme Fehlermeldungen ausgeführt werden. Damit die ``code-block`` Abschnitte funktionieren sollten Sie eine Version des ``docutils`` Pakets (darin sind u.a. die rst2xxx Kommandos) von mindestens 0.9 haben. |
**Restructured Text (reST) / Markdown** Im WS1920 möchte ich Markdown als Abgabeformat empfehlen, da es einfach zu verwenden ist als reST. Eine kurze Anleitung zu den Möglichkeiten in Markdown ist hier: `<http://hhoegl.informatik.hs-augsburg.de/sysprog/Markdown-Anleitung>`_. .. Die Lösungen zu den Übungsaufgaben geben Sie im reST Format ab. Eine kurze Anleitung finden Sie unter: http://hhoegl.informatik.hs-augsburg.de/hhwiki/FAQ 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. |
Zeile 184: | Zeile 235: |
https://shop.linupfront.de/product/lxes/ | https://www.tuxcademy.org/media/lxes/ |
Zeile 192: | Zeile 243: |
http://heather.cs.ucdavis.edu/~matloff/unix.html | http://heather.cs.ucdavis.edu/~matloff/unix.html |
Zeile 200: | Zeile 251: |
- 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 ...) - Installieren von Paketen |
- 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, micro, nano) - 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 |
Zeile 218: | Zeile 268: |
:: stud ALL=(ALL:ALL) ALL hinzu. |
:: stud ALL=(ALL:ALL) ALL hinzu ("stud" ist der Loginname). |
Zeile 275: | Zeile 325: |
**Hexdump/Hex Editor** | **Hexdump/Hex Editoren** |
Zeile 280: | Zeile 330: |
.. _Quiz: Quiz, Quickies -------------- .. _Q1: **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/. |
|
Zeile 339: | Zeile 357: |
* Mark Burgess, **The GNU C Programming Tutorial**, Edition 4.1. http://www.crasseux.com/books |
* Mark Burgess, **The GNU C Programming Tutorial** http://markburgess.org/CTutorial/GNU-ctut.pdf * Mark Burgess, **The UNIX Programming Environment** http://markburgess.org/unix/unix.pdf |
Zeile 355: | Zeile 377: |
* Moritz Höppner, **Linux-Assembler Tutorial**, 2006 (`<asm_ws.pdf>`_) | * Moritz Höppner, **Linux-Assembler Tutorial**, 2006 (http://hhoegl.informatik.hs-augsburg.de/sysprog/asm_ws.pdf>) * Project Nayuki, **A fundamental introduction to x86 assembly programming** https://www.nayuki.io/page/a-fundamental-introduction-to-x86-assembly-programming |
Zeile 368: | Zeile 394: |
Die IA-32 Handbücher von 2003 sind auch auf meinem Server (der Befehlssatz ist in der Datei 24547112.pdf): http://hhoegl.informatik.hs-augsburg.de/sysprog/ia-32-2003/ |
Lokal: IA-32 Handbücher http://hhoegl.informatik.hs-augsburg.de/sysprog/ia-32-2003/ (der Befehlssatz ist in der Datei 24547112.pdf) IA-64 Handbücher http://hhoegl.informatik.hs-augsburg.de/sysprog/Intel64-and-IA-32-2015/ |
Zeile 374: | Zeile 402: |
and Analyzing Assembly Language**, Intel 2009, `<edsuaal.pdf>`_. Nun noch ein paar gewöhnliche Bücher, die man mit Geld kaufen kann: |
and Analyzing Assembly Language**, Intel 2009, `<http://hhoegl.informatik.hs-augsburg.de/sysprog/edsuaal.pdf>`_. Nun noch ein paar traditionelle Bücher, die man mit Geld kaufen kann: |
Zeile 385: | Zeile 413: |
* Sivarama P. Dandamudi, **Guide to Assembly Language Programming in Linux**, Springer 2005 (Hochschulangehörige können das Buch von Springerlink herunterladen: https://link.springer.com/book/10.1007/b136895) |
|
Zeile 406: | Zeile 438: |
* Tobias Klein, Buffer Overflows und Format-String-Schwachstellen: Funktionsweisen, Exploits und Gegenmaßnahmen, dpunkt Verlag, 2003. |
* Tobias Klein, **Buffer Overflows und Format-String-Schwachstellen: Funktionsweisen, Exploits und Gegenmaßnahmen**, dpunkt Verlag, 2003. |
Zeile 412: | Zeile 444: |
Vergessen Sie bitte nicht, dass Sie als Studenten der Hochschule Augsburg über `Safari Books Online <http://www.safaribooksonline.de/>`_ gratis Zugriff auf |
Das erste Kapitel mit dem Titel *Buffer Overflows* ist frei zum Herunerladen: http://hhoegl.informatik.hs-augsburg.de/sysprog/Tobias-Klein-Buffer.pdf Es ist eine gute Begleitlektuere fuer unser "Exploit" Beispiel. Vergessen Sie bitte nicht, dass Sie als Studentinnen und Studenten der Hochschule Augsburg über `Safari Books Online <http://www.safaribooksonline.de/>`_ gratis Zugriff auf |
Systemnahe Programmierung
Neu:
- Beispiel Pointer-in-C vom 22.11.2019
- Tabelle der Sprungbefehle
- Übungen mit Markdown schreiben
- Fetch-Decode-Excute Zyklus http://hhoegl.informatik.hs-augsburg.de/sysprog/img/f-d-e.svg
Schnelle Navigation
|| Inhalt | Klausuren | Literatur | Übungsaufgaben ||
|| 64-Bit Rechner | Debuggen mit GDB | ReST | Linux | No-Root | Textdateien | Textbrowser | Hexdump | Syscalls 64-Bit || Syscalls 32-Bit || Rust || 64-Bit "Brennpunkt"
Moodle-Kurs: https://moodle.hs-augsburg.de/course/view.php?id=2806
Sie bekommen die Beispielprogramme von unserem Gitlab mit dem git Kommando:
git clone https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog
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>`_).
Zusaetzliche Themen, die wir bearbeiten, sind:
Die x86-64 Architektur
https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog/tree/master/x86-64
Exploits
https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog/tree/master/Exploit
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 und 32-Bit Programme
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 möchte, muss man ausserdem die Bibliotheken im 32-Bit Format installieren. Das geht z.B. auf einem Mint Linux 18.2 mit:
sudo apt install gcc-multilib libc6-dev-i386
Alle Beispielprogramme im sysprog.git Repository werden als 32-Bit Programme kompiliert. Ich nehme an, dass mittlerweile alle unter einem 64-Bit Linux arbeiten und fuer den Kurs Programme im 32-Bit Modus erstellen.
64-Bit Programme auf x86-64 Architektur
Einige haben nachgefragt, ob es weiterführende Informationen zum x86 mit 64-Bit Architektur gibt. Eine sehr schöne 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.
Von Ed Jorgensen gibt es das freie Buch x86-64 Assembly Language Programming with Ubuntu, siehe http://www.egr.unlv.edu/~ed/x86.html.
Mittlerweile (12/2018) gibt es dazu auch einen Ordner im sysprog.git Repository: https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog/tree/master/x86-64. Siehe darin den Text main.rst.
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).
Es gibt auch eine Übersicht der Kommandos (Okt 2019).
Restructured Text (reST) / Markdown
Im WS1920 möchte ich Markdown als Abgabeformat empfehlen, da es einfach zu verwenden ist als reST. Eine kurze Anleitung zu den Möglichkeiten in Markdown ist hier: http://hhoegl.informatik.hs-augsburg.de/sysprog/Markdown-Anleitung.
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, micro, nano)
- 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 ("stud" ist der Loginname).
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 Editoren
- od
- xxd
- hexedit
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.
Jonathan Bartlett, Programming from the ground up (ohne Vorkenntnisse in C lesbar; baut auf dem GNU Assembler auf. Nehmen Sie die Version ProgrammingGroundUp-1-0-lettersize.pdf)
Paul Carter, PC Assembly Language. Ein wenig C wird vorausgesetzt. Als Assembler wird der "nasm" verwendet.
Mike Banahan, Declan Brady and Mark Doran, The C Book, Addison Wesley 1991 (frei zum Download)
Mark Burgess, The GNU C Programming Tutorial
Mark Burgess, The UNIX Programming Environment
Nick Parlante, Essential C (freier Artikel mit 45 Seiten)
Nick Parlante, Pointers and Memory
Ted Jensen, A tutorial on pointers and arrays in C
Moritz Höppner, Linux-Assembler Tutorial, 2006 (http://hhoegl.informatik.hs-augsburg.de/sysprog/asm_ws.pdf>)
Project Nayuki, A fundamental introduction to x86 assembly programming
https://www.nayuki.io/page/a-fundamental-introduction-to-x86-assembly-programming
Norman Matloff, Vorlesung Computer Organization and Machine Dependent Programming, (ECS50), Zu dieser Veranstaltung hat Professor Matloff das schöne freie Buch Below C Level: An Introduction to Computer Systems geschrieben.
Norman Matloff's Unix and Linux Tutorial Center
Intel 64 and IA-32 Architectures Software Developer Manuals
Lokal:
IA-32 Handbücher http://hhoegl.informatik.hs-augsburg.de/sysprog/ia-32-2003/ (der Befehlssatz ist in der Datei 24547112.pdf)
IA-64 Handbücher http://hhoegl.informatik.hs-augsburg.de/sysprog/Intel64-and-IA-32-2015/
David Kreitzer, Max Domeika, Ensuring Development Success by Understanding and Analyzing Assembly Language, Intel 2009, http://hhoegl.informatik.hs-augsburg.de/sysprog/edsuaal.pdf.
Nun noch ein paar traditionelle Bücher, die man mit Geld kaufen kann:
Randal E. Bryant and David R. O'Hallaron, Computer Systems: A Programmer's Perspective, 3rd edition, Addison-Wesley 2015 (http://csapp.cs.cmu.edu)
Ein beeindruckend gut gemachtes Lehrbuch, das systemnahe Programmierung mit Rechnerarchitektur verbindet. Das Taschenbuch mit 1120 Seiten kostet gut 60 Euro. Das wär doch was zu Weihnachten -- eine Geschenk für's Leben!
Sivarama P. Dandamudi, Guide to Assembly Language Programming in Linux, Springer 2005 (Hochschulangehörige können das Buch von Springerlink herunterladen: https://link.springer.com/book/10.1007/b136895)
Randall Hyde, Write Great Code, No Starch Press 2004.
http://proquest.tech.safaribooksonline.de/book/software-engineering-and-development/1593270038
Randall Hyde, Write Great Code, Volume 2, No Starch Press 2006.
http://proquest.tech.safaribooksonline.de/book/software-engineering-and-development/1593270658
Norman Matloff, Peter Jay Salzman, The Art of Debugging with GDB, DDD and Eclipse, No Starch Press 2008. Das erste Kapitel mit dem Titel "Some preliminaries for beginners and pros" (45 Seiten) kann man frei herunterladen.
Justin Seitz, Hacking mit Python. Fehlersuche, Programmanalyse, Reverse Engineering. dpunkt Verlag 2009.
Tobias Klein, Buffer Overflows und Format-String-Schwachstellen: Funktionsweisen, Exploits und Gegenmaßnahmen, dpunkt Verlag, 2003. Das Buch kann man ueber einen Hochschulzugang auf Safari kostenlos lesen:
http://proquest.tech.safaribooksonline.de/book/software-engineering-and-development/9783898641920
Das erste Kapitel mit dem Titel Buffer Overflows ist frei zum Herunerladen: http://hhoegl.informatik.hs-augsburg.de/sysprog/Tobias-Klein-Buffer.pdf Es ist eine gute Begleitlektuere fuer unser "Exploit" Beispiel.
Vergessen Sie bitte nicht, dass Sie als Studentinnen und 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.