x86-64 (AT&T Syntax)#
ABI#
ABI - Application Binary Interface is a type of convention for function calls, similar to how there is for syscalls. The ABI that linux uses is called - System V ABI
Q: Why do I care? Why should I follow their convention?
It allows you to call functions written by other people, even in other programming languages and allows you to estimate the behavior and safety of your registers/stack.
Stack#
Q: What is the stack and how does asm use it?
- The stack is an area of memory that is reserved for stacking temporary items.
- The operating system preallocates space for the stack and then puts the pointer to this memory in the stack pointer ,
%rsp. - While pointers generally refer to the beginning of a memory region, at the beginning of a program
%rsppoints to the end of the memory region containing the stack. (Bartlett, ch. 11.2)
Q: Why must I keep the stack 16byte aligned before a function call?
This comes from the System V ABI rule, there are instructions that use vectors (a single register that holds values of the same type processed in parallel). These instructions expect 16 contiguous bytes.
Q: What does it mean to align the stack to 16 bytes?
%rsp holds the pointer (address) to the top of the stack
rsp = 0x1000 → aligned (0x1000 % 16 == 0)
rsp = 0x1008 → NOT aligned (0x1008 % 16 == 8)
rsp = 0x1010 → aligned