Diese Seite ist nicht editierbar. Sie können den Quelltext sehen, jedoch nicht verändern. Kontaktieren Sie den Administrator, wenn Sie glauben, dass hier ein Fehler vorliegt. {{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 <code asm>push</code> auf dem Stack sichern. Vor der Rückkehr zur Funktion, müssen diese Register dann mittels <code asm>pop</code> wiederhergestellt werden. Mehr hierzu gibt es im Cheat-Sheet((https://cs.brown.edu/courses/cs033/docs/guides/x64_cheatsheet.pdf))