下面是C代碼緩衝區溢出不溢出返回地址
#include <stdio.h>
void read_input()
{
char input[512];
int c = 0;
while (read(0, input + c++,1) == 1);
}
int main()
{
read_input();
printf("Done !\n");
return 0;
}
在上面的代碼中,應該有陣列「輸入」的緩衝區溢出。我們給它的文件將包含超過600個字符,全部爲2(例如2222222 ...)(btw,ascii of 2是32)。但是,在用該文件執行代碼時,不會引發段錯誤,這意味着程序計數器寄存器不變。下面是在gdb輸入陣列的存儲的屏幕截圖,突出顯示在EBP(程序計數器)的地址寄存器,其清楚地表明它被跳過寫入時:
字符的書寫在程序計數器之後繼續,這也許是爲什麼段錯誤沒有顯示。請解釋爲什麼會發生這種情況,以及如何使程序計數器溢出。