Dieser Artikel ist Teil der Buffer Overflow Reihe. Hier gibt es mehr zu diesem Thema:
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 |
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)