次のような関数があります。
int bof(char *str)
{
char buffer[12];
strcpy(buffer, str);
return 1;
}
その差出人住所を上書きしようとしています。たとえば、を使用してこれを行うことができることがわかりましたmemcpy(buffer+24, "\x15\xf1\xff\xbf", 4)
。理解できないのは、なぜ にアクセスする必要があるのかということですbuffer + 24
。私の C メモリ モデルの理解によると、この関数が実行されたときのスタックは次のようになります。
bottom of top of
memory memory
buffer(12) sfp(4) ret(4) str(4)
<------ [ ][ ][ ][ ] --->
top of bottom of
stack stack
これは、ret アドレスを buffer+16 から開始する必要があることを示唆しています。余分な 8 バイトはどこから入ってくるのでしょうか?
ちなみに、私はこれを32ビットシステムで実行しています。