我有一个看起来像这样的函数:
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 地址从缓冲区 + 16 开始。额外的 8 个字节从哪里来?
顺便说一句,我在 32 位系统上运行它。