我有一個功能,看起來像這樣:C函數棧佈局
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位系統上運行這個。
這個問題可能是一個很好的參考:[緩衝區溢出攻擊](http://stackoverflow.com/questions/7344226/buffer-overflow-attack) – Mysticial
只需使用調試器,並回答自己的問題。這幾乎肯定取決於(至少部分)你的操作系統,編譯器和編譯器版本:) – paulsm4
編譯器可以自由添加任何填充 – texasbruce