-
Notifications
You must be signed in to change notification settings - Fork 28
Calling convention
Johnson Tan edited this page Dec 25, 2015
·
2 revisions
caller_func:
...
pushl arguments
call callee_func
popl arguments
...
callee_func:
pushl %ebp
subl xx, %esp
...
leave
ret
Content | Base address |
---|---|
previous frames... | |
other arguments... argument 2 argument 1 argument 0 |
← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp
|
← %ebp
|
local variable 0 local variable 1 other local variables... local variable n |
← %esp
|
Simplified version:
Content | Base address |
---|---|
arguments | ← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp
|
← %ebp
|
local variables... | ← %esp
|
Content | Base address |
---|---|
arguments | ← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp
|
← %ebp
|
local variables... | (%esp previously pointed here) |
argument n ... argument 0 |
← %esp |
Content | Base address |
---|---|
arguments | ← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp
|
← %ebp
|
local variables... | |
argument n ... argument 0 |
← %esp + 4 (%esp previously pointed here) |
saved %eip |
← %esp |
Content | Base address |
---|---|
arguments | ← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp
|
← %ebp
|
local variables... | |
argument n ... argument 0 |
← %esp + 8
|
saved %eip
|
← %esp + 4 (%esp previously pointed here) |
saved %ebp |
← %esp |
Content | Base address |
---|---|
arguments | |
saved %eip
|
|
saved %ebp
|
(%ebp previously pointed here) |
local variables... | |
argument n ... argument 0 |
← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp |
← %esp , %ebp |
Content | Base address |
---|---|
arguments | |
saved %eip
|
|
saved %ebp
|
|
local variables... | |
argument n ... argument 0 |
← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp
|
← %ebp (%esp previously pointed here) |
local variables... | ← %esp |
leave
is the same as:
movl %ebp, %esp
popl %ebp
Content | Base address |
---|---|
arguments | ← %ebp + 8 |
saved %eip
|
← %ebp + 4 |
saved %ebp
|
← %ebp |
local variables... | |
argument n ... argument 0 |
← %esp + 4
|
saved %eip |
← %esp (%ebp previously pointed here) |
(Junk) | (%esp previously pointed here) |
Content | Base address |
---|---|
arguments | ← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp
|
← %ebp
|
local variables... | |
argument n ... argument 0 |
← %esp |
(Junk) | (%esp previously pointed here) |
Content | Base address |
---|---|
arguments | ← %ebp + 8
|
saved %eip
|
← %ebp + 4
|
saved %ebp
|
← %ebp
|
local variables... | ← %esp |
(Junk) | (%esp previously pointed here) |