{{tag>deutsch it-security cheatsheet basics}}
====== 64-Bit Stack CheatSheet ======
{{page>vorlagen:64_bit_stack_nav}}
==== x64 Register ====
Das x64-Register ist wie folgt aufgebaut((https://learn.microsoft.com/de-de/windows-hardware/drivers/debugger/x64-architecture)) ((https://www.complang.tuwien.ac.at/ubvl/amd64/amd64h.html))
^ 8-Bytes (64 Bit) ^ 4 Bytes (32 Bit) ^ 2 Bytes (16 Bit) ^ 1 Byte (8 Bit) ^ Bezeichnung ^ Anwendung ^
| @lightgreen:**RAX** | @orange:EAX | @lightgrey:AX | @lightblue:AL | Temporäres Register | erstes Rückgaberegister |
| @lightgreen:**RBX** | @orange:EBX | @lightgrey:BX | @lightblue:BL | Callee-gesichertes Register | |
| @lightgreen:**RCX** | @orange:ECX | @lightgrey:CX | @lightblue:CL | Argumentregister | viertes Ganzzahlargument |
| @lightgreen:**RDX** | @orange:EDX | @lightgrey:DX | @lightblue:DL | Argumentregister | drittes Ganzzahlargument, zweites Rückgaberegister |
| @lightgreen:**RSI** | @orange:ESI | @lightgrey:SI | @lightblue:SIL | Argumentregister | zweites Ganzzahlargument |
| @lightgreen:**RDI** | @orange:EDI | @lightgrey:DI | @lightblue:DIL | Argumentregister | erstes Argument |
| @lightgreen:**RBP** | @orange:EBP | @lightgrey:BP | @lightblue:BPL | @red:Callee-gesichertes Register | @red:**Frame Pointer** |
| @lightgreen:**RSP** | @orange:ESP | @lightgrey:SP | @lightblue:SPL | @red: | @red:**Stack Pointer** |
| @lightgreen:**RIP** | @orange:EIP | @lightgrey:- | @lightblue:- | @red:Instruction Pointer | @red:**Adresse des nächsten auszuführenden Maschinenbefehls, Read-Only** |
| @lightgreen:**R8** | @orange:R8D | @lightgrey:R8W | @lightblue:R8B | Argumentregister | fünftes Argument |
| @lightgreen:**R9** | @orange:R9D | @lightgrey:R9W | @lightblue:R9B | Argumentregister | sechstes Argument |
| @lightgreen:**R10** | @orange:R10D | @lightgrey:R10W | @lightblue:R10B | Temporäres Register | |
| @lightgreen:**R11** | @orange:R11D | @lightgrey:R11W | @lightblue:R11B | Temporäres Register | |
| @lightgreen:**R12** | @orange:R12D | @lightgrey:R12W | @lightblue:R12B | Callee-gesichertes Register | |
| ... | ... | ... | | | ... |
| @lightgreen:**R15** | @orange:R15D | @lightgrey:R15W | @lightblue: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-Sheet((https://cs.brown.edu/courses/cs033/docs/guides/x64_cheatsheet.pdf))