I'm reading a book that explains how the ebp
and eip
registers work when a function is called. The following figure is provided:
here array
is a local function variable. The function arguments are a
, and b
. This is how the actual C code looks like:
#include <stdio.h>
void function(int a, int b)
{
int array[8];
}
int main()
{
function(1,2);
return 0;
}
I compile with gcc -m32 -g function.c
and run the program in gdb
. The command disas main
shows (skipped some lines):
0x08048474 : push $0x2 0x08048476 : push $0x1 0x08048478 : call 0x804843b 0x0804847d : add $0x10,%esp
the first and last few instructions of function() are:
0x0804843b : push %ebp 0x0804843c : mov %esp,%ebp 0x0804843e : sub $0x38,%esp 0x08048441 : mov %gs:0x14,%eax 0x08048447 : mov %eax,-0xc(%ebp) 0x0804844a : xor %eax,%eax 0x0804844c : nop ... 0x0804845e : leave 0x0804845f : ret
and when I inspect the contents of ebp
:
(gdb) x/4xw $ebp 0xffffcd48: 0xffffcd68 0x0804847d 0x00000001 0x00000002
I understand that in the stack, ebp
should be followed by the return location 0x0804847d
and the function arguments 0x00000001
and 0x00000002
. However I don't know what is 0xffffcd68
. Is this the address of ebp
?
function
? – Mark Plotnickfunction
. – MAGA