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 と戻りアドレスが見つかりましたか?