我无法理解在哪里可以找到 EBP 和退货地址。据我了解,调用 sub 是为了为函数中的局部变量保留空间。特别是我对这段代码有点困惑..
void countLines(FILE* f){
char buf[0x400];//should be big enough for anybody
int lines=0;
fread(buf,READSIZE,1,f);
for(int i=0;i<0x400;i++)
if(buf[i] == '\n')
lines++;
printf("The number of lines in the file is %d\n",lines);
return;
}
用 gdb 反汇编这个函数后,我得到:
0x08048484 <+0>: push %ebp
0x08048485 <+1>: mov %esp,%ebp
0x08048487 <+3>: sub $0x428,%esp
为什么是 0x428?将局部变量长度加起来,我只得到 0x408(char[400]、行和 i)。此外,是否在保留空间之后立即找到 EBP 和返回地址?