Ein Systemaufruf (syscall) bittet das Betriebssystem um Hilfe, etwa zum Schreiben auf den Bildschirm. Die Nummer des Aufrufs steht in rax, die Argumente in rdi, rsi, rdx. Unter Linux ist 1 write, 0 read und 60 exit.
Zum Lernen helfen drei Werkzeuge: gdb führt Programme Schritt für Schritt aus und zeigt Register, objdump -d zeigt den Maschinencode und der Compiler-Explorer (godbolt.org) zeigt, wie C-Code zu Assembler wird.
; Eingabe lesen (bis zu 64 Zeichen)
mov rax, 0 ; read
mov rdi, 0 ; stdin
mov rsi, puffer
mov rdx, 64
syscall ; rax = Anzahl gelesener Zeichengdb ./hallo
(gdb) break _start
(gdb) run
(gdb) stepi
(gdb) info registersMerke
syscallruft das Betriebssystem, die Nummer steht inrax- Linux: 0 = read, 1 = write, 60 = exit
gdbundobjdump -dzeigen, was wirklich passiert
Aufgabe
Öffne dein Programm in gdb und gehe es mit stepi durch.