Assembler programmieren

ARM64 und x86-64 Prozessoren direkt programmieren

Programmiersprachen müssen erst in Maschinensprache übersetzt werden, damit sie von der CPU ausgeführt werden können. Das macht Entwicklern das Leben zwar leichter, aber es hat seinen Preis: der erzeugte Maschinencode ist vielleicht nicht optimal in Hinblick auf Geschwindigkeit oder Platzverbrauch. Dann greift man zu Assembler - der Maschinensprache, mit der man direkt den Prozessor programmiert. Aber auch für Entwickler höherer Sprachen wie C, C++, Go, Rust, usw. ist es hilfreich zu verstehen, was der von ihnen erzeugte Maschinencode genau tut.

In diesem Kurs lernst Du, wie die ARM64- bzw. die x86-64 Architektur funktioniert und wie Du kleine Programme direkt in Assembler schreibst. Und Du bekommst eine Vorstellung, wie Du Dich in größeren Assemblerprojekten orientieren kannst.

Einen weiteren Anwendungsfall, den wir in dieser Schulung betrachten, ist Maschinencode für unwirtliche Umgebungen wie Shellcodes für Exploits, BIOS, UEFI oder eigene Mini-Betriebssysteme.

Wir bieten Termine dieses Kurses in zwei Varianten an: entweder für ARM64 oder für x86-64.

Trainer und Dozenten

Marian Kogler ist Geschäftsführer der syret GmbH, einem Unternehmen aus Halle an der Saale, das sich mit IT-Sicherheit und IT-Forensik beschäftigt. Er schreibt regelmäßig Shellcode in Assembler, um Exploits zu entwickeln.

Voraussetzungen

Grundlegende Linux-Kenntnisse und keine Angst vor der Kommandozeile werden vorausgesetzt. Grundkenntnisse in C oder einer anderen systemnahen Programmiersprache sind hilfreich.

Inhalt

Einführung

  • Die ARM64- bzw. x86-64 CPU Architektur
  • Vergleich mit anderen Architekturen
  • Prozessor, Register und Arbeitsspeicher
  • Datentypen

Programme schreiben und kompilieren

  • Compiler und Assembler
  • Assembler-Makros
  • Konventionen für Funktionsaufrufe

Assembler-Befehle

  • Befehle und Opcodes
  • Notationen
  • Speicheroperationen
    • ARM64: z.B. LDR, SDR, LDP, SDP, MOV, ...
    • x86-64: z.B. mov, push, pop, ...
  • Kontrollflussoperationen
    • ARM64: z.B. B, Bcc, RET, ...
    • x86-64: z.B. jmp, cmp, test, je, jne, ...
  • Arithmetische und logische Operationen
    • ARM64: z.B. ADD, SUB, AND, ORR, MUL, ...
    • x86-64: z.B. add, sub, imul, lea, shl, shr, and, or, xor, ...
  • Häufige Fallstricke und Alternativen

Kurszeiten

Wer möchte, reist bis 22 Uhr am Vortag an und nutzt den Abend bereits zum Fachsimpeln am Kamin oder im Park.

An den Kurstagen dann von 9-18 Uhr (mit 2 Kaffee- und 1 Mittagspause) etwa 60% Schulungen und 40% Übungen. Selbstverständlich arbeitet jeder Teilnehmer am von uns gestellten Notebook oft parallel zum Referenten mit.

Anschließend Abendessen und Angebote für Fachsimpeln, Ausflüge uvm. Wir schaffen eine Atmosphäre, in der Fachleute sich ungezwungen austauschen. Wer das nicht will, wird zu nichts gezwungen und findet auch jederzeit Ruhe.