Assembly Intel x86¶
Instructions¶
- CDQE: RAX ← sign-extend of EAX.
- MOVSXD rcx,ecx: Move doubleword to quadword with sign-extension.
- MOVABS rcx, <imm64>: to load arbitrary 64-bit constant into register and to load/store integer register from/to arbitrary constant 64-bit address is available.
- ENDBR64: “End Branch 64 bit”, Terminate Indirect Branch in 64 bit. Related to Control flow Enforcement Technology (CET) hardening (-fcf-protection=branch option of GCC). Executed as NOP if the CPU doesn’t support CET.
Registers¶
64b register | Lower 32b | Lower 16b | Lower 8b |
---|---|---|---|
rax | eax | ax | al |
r9 | r9d | r9w | r9b |
x86-64 ABI¶
System V AMD64 ABI (Linux):
- First 6 arguments placed onto registers: RDI, RSI, RDX, RCX, R8, R9.
Microsoft x64 calling convention:
- First 4 arguments placed onto registers: RCX, RDX, R8, R9.