, , ,

64-Bit Stack CheatSheet

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)