1
#include <stdio.h>
#include <string.h>
void bad() {
printf("Oh shit really bad~!\r\n");
}
void foo() {
char overme[4] = "WOW";
*(int*)(overme+8) = (int)bad;
}
int main() {
foo();
}
在32位linux中它會產生段錯誤,但在windows中不是。爲什麼?爲什麼下面的代碼不會在窗口上產生「分段錯誤」?
不應該'bp'之前的地址總是返回地址? – 2011-04-05 03:54:55
不是。該標準對於使用的調用約定或者位於堆棧中的事情,甚至是甚至存在bp寄存器都沒有什麼可說的:-)我回答了先前的問題,其中使用完全相同的編譯器,堆棧差異很大,除了優化級別以外的其他一切:http://stackoverflow.com/questions/5536564/stack-layout-for-process/5536611#5536611 – paxdiablo 2011-04-05 03:57:51
我懷疑在Windows上是否發生了段錯誤? – 2011-04-05 14:55:00