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
- 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
- ARM64: z.B. LDR, SDR, LDP, SDP, MOV, ...
- x86-64: z.B. mov, push, pop, ...
- ARM64: z.B. B, Bcc, RET, ...
- x86-64: z.B. jmp, cmp, test, je, jne, ...
- ARM64: z.B. ADD, SUB, AND, ORR, MUL, ...
- x86-64: z.B. add, sub, imul, lea, shl, shr, and, or, xor, ...
Kurszeiten
Wer möchte, reist bis 22 Uhr am Vortag an und nutzt den Abend bereits zum Fachsimpeln am Kamin oder im Park.
An Kurstagen gibt es bei uns ab 8 Uhr Frühstück.
Unsere Kurse beginnen um 9 Uhr und enden um 18 Uhr.
Neben den kleinen Pausen gibt es eine Stunde Mittagspause mit leckerem, frisch in unserer Küche zubereitetem Essen.
Nach der Schulung 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.