====== NASM (Netwide Assembler) Tutorial unter 64-bit (AMD64) Linux ====== :!: **Dieses Tutorial ist noch im Aufbau!** :!:\\ \\ Du kannst im [[https://www.proggen.org/forum/|Forum]] Fragen stellen, aber auch gerne Kritik üben, wo Du Dinge verbessert sehen möchtest. **Deine Fragen und Anregungen helfen mit, diesen Bereich und das Tutorial zu verbessern.** ===== Was sollte ich über Assembler wissen? ===== * [[nasm:general:about|Allgemeine Beschreibung]] * [[nasm:general:why|Gründe Assembler zu verwenden]] ===== Was benötige ich um Programme in Assembler zu erstellen? ===== * [[nasm:pre:requirements|Vorausgesetztes Wissen]] * [[nasm:pre:setup|Installation des Assemblers]] * [[nasm:pre:first|Das erste Programm assemblieren, linken und ausführen]] ===== Wie wird ein Programm ausgeführt? ===== * [[nasm:run:start|Den Einstiegspunkt des Programmes definieren]] ===== Wie werden Daten gespeichert und verarbeitet? ===== * [[nasm:data:register|Register]] * [[nasm:data:operations|Operationen mit Registern ausführen]] * [[nasm:data:initialized|Initialisierte Daten (Daten-Segment)]] * [[nasm:data:uninitialized|Uninitialisierte Daten (BSS-Segment)]] * [[nasm:data:stack|Stack]] ===== Wie werden System-Funktionen ausgeführt? ===== * [[nasm:data:int|Kernel-Funktionen aufrufen]] ===== Wie wird der Kontrollfluss gesteuert? ===== * [[nasm:control:cmp|Vergleiche und Sprünge (Bedingungen)]] * [[nasm:control:loop|Wiederholungen (Schleifen)]] * [[nasm:control:jmp|Sprünge ohne Bedingungen]] ===== Wie können Strings in NASM effizient verarbeitet werden? ===== * [[nasm:string:repstosb|Wiederholtes Schreiben (rep stosb)]] * [[nasm:string:movsb|Blöcke kopieren (movsb)]] ===== Wie kann ein NASM-Programm dokumentiert und strukturiert werden? ===== * [[nasm:structure:comments|Kommentare]] * [[nasm:structure:indents|Einrückungen und Abstände]] * [[nasm:structure:macro|Macros]] * [[nasm:structure:function|Funktionen]] * [[nasm:structure:ctonasm|C-Funktionen in NASM verwenden]] * [[nasm:structure:nasmtoc|NASM-Funktionen in C verwenden]] ===== Welche Informationen stehen beim Programmstart zur Verfügung? ===== * [[nasm:init:argv|Kommandozeilenparameter]] * [[nasm:init:env|Umgebungsvariablen]] ===== Welche Anwendungsfälle gibt es für Assembler in der Praxis? ===== * [[nasm:use:optimization|Optimierung]] * [[nasm:use:shellcode|Exploits (Shellcode)]] ===== Wo finde ich weitere Informationen? ===== * [[https://www.proggen.org/forum/viewtopic.php?f=39&t=5151|Autorendiskussion]] * [[http://www.nasm.us/|NASM-Homepage]]