void f(int a, int b) { a += b; } f(2,43) parameter a needs to have a lower address than parameter b caller's code: push $43 push $2 call f addl $8,%esp <- ebp oldEbp_offset = 0 retaddr_offset = oldEbp_offset + 4 a_offset = retaddr_offset + 4 b_offset = a_offset + 4 f: # entry push %ebp movl %esp,%ebp push %eax movl b_offset(%ebp),%eax addl %eax,a_offset(%ebp) pop %eax # exit movl %ebp,%esp pop %ebp ret