64-Bit Stack CheatSheet
Dieser Artikel ist Teil der Buffer Overflow Reihe. Hier gibt es mehr zu diesem Thema:
x64 Register
Das x64-Register ist wie folgt aufgebaut1) 2)
8-Bytes (64 Bit) | 4 Bytes (32 Bit) | 2 Bytes (16 Bit) | 1 Byte (8 Bit) | Bezeichnung | Anwendung |
---|---|---|---|---|---|
RAX | EAX | AX | AL | Temporäres Register | erstes Rückgaberegister |
RBX | EBX | BX | BL | Callee-gesichertes Register | |
RCX | ECX | CX | CL | Argumentregister | viertes Ganzzahlargument |
RDX | EDX | DX | DL | Argumentregister | drittes Ganzzahlargument, zweites Rückgaberegister |
RSI | ESI | SI | SIL | Argumentregister | zweites Ganzzahlargument |
RDI | EDI | DI | DIL | Argumentregister | erstes Argument |
RBP | EBP | BP | BPL | Callee-gesichertes Register | Frame Pointer |
RSP | ESP | SP | SPL | Stack Pointer | |
RIP | EIP | - | - | Instruction Pointer | Adresse des nächsten auszuführenden Maschinenbefehls, Read-Only |
R8 | R8D | R8W | R8B | Argumentregister | fünftes Argument |
R9 | R9D | R9W | R9B | Argumentregister | sechstes Argument |
R10 | R10D | R10W | R10B | Temporäres Register | |
R11 | R11D | R11W | R11B | Temporäres Register | |
R12 | R12D | R12W | R12B | Callee-gesichertes Register | |
… | … | … | … | ||
R15 | R15D | R15W | R12B | Callee-gesichertes Register |
Aufrufkonventionen
Eine Funktion (Caller) ruft eine Unterfunktion (Callee) auf. Die Register RBP, RBX, R12 bis R15 gehören dem Caller. Will der Callee diese Verändern, so muss er sie mit
push
auf dem Stack sichern. Vor der Rückkehr zur Funktion, müssen diese Register dann mittels
pop
wiederhergestellt werden.
Mehr hierzu gibt es im Cheat-Sheet3)