x86_64 Assembly Linux
Einführung
Hi!
Dies ist eine kleine und praxisnahe Einführung in x86_64-Assembly unter Linux.
Der Fokus liegt darauf, zu verstehen, wie Syscalls auf niedriger Ebene funktionieren – ohne C-Runtime, ohne main, direkt mit dem Kernel.
Dieses Wissen ist grundlegend für:
- Reverse Engineering
- Binary Analysis
- Exploit Development
- Low-Level Debugging
Grundlagen von x86_64 Assembly
Unter x86_64 Linux arbeiten wir mit CPU-Registern wie:
rax– Syscall-Nummer und Rückgabewertrdi– 1. Argumentrsi– 2. Argumentrdx– 3. Argumentr10,r8,r9– weitere Argumente
Systemaufrufe werden mit der Instruktion syscall ausgeführt.
Die Übergabe der Parameter erfolgt ausschließlich über Register.
Hello World in x86_64 Assembly
section .data
msg db 'Hello World', 0x0a
msglen equ $ - msg
section .text
global _start
_start:
mov rax, 1 ; Syscall-Nummer für write
mov rdi, 1 ; stdout
mov rsi, msg ; Buffer
mov rdx, msglen ; Länge
syscall
mov rax, 60 ; Syscall-Nummer für exit
mov rdi, 0 ; Exit-Status
syscallBuild & Run
nasm -f elf64 hello.asm -o hello.o
ld hello.o -o hello
./helloSyscall-Referenzen
- /usr/include/asm/unistd_64.h
- man 2 write
- man 2 exit
- https://syscalls.w3challs.com/?arch=x86_64