2011-05-07 53 views
0

如果這個問題是愚蠢的或已被問到,但我找不到它,我很抱歉。緩衝區溢出 - 爲什麼一些ascii的工作,而不是其他人

我有一個程序,我試圖使用緩衝區溢出。這是一個簡單的程序,它使用getchar()來檢索用戶的輸入。緩衝區的大小設置爲12.我可以通過輸入> 12 x或使用> 12 \ x78來使程序崩潰,但如果我輸入數百個A或\ x41,則不會出現故障。

任何幫助或指向正確的方向將不勝感激。

+0

發佈您的整個程序。 – 2011-05-07 04:34:07

+0

如果覆蓋內存,則在256中始終有一個機會,該字節不會更改其值。 – 2011-05-07 07:25:54

+0

對不起,我無法發佈代碼。如果這是一個沒有代碼的普遍問題,我想請忽略它。謝謝參觀。 – Robert 2011-05-07 12:57:45

回答

0

0x41414141可能是進程文本頁面內的有效地址。詳細信息請查看流程的細分圖。

+0

我不確定這是不是你的意思,但我用100A運行gdb,它並沒有寫入緩衝區上方的局部變量[11],它的行爲就像程序運行完美。 – Robert 2011-05-07 04:18:42

0

要消除猜測,請查看彙編代碼,然後查看程序的機器指令。在調試器中運行它,看看內存中發生了什麼。您可以看到堆棧上的哪些地址放置了局部變量,以及哪些地址寄存器,特別是指令指針保存在函數調用中。

看看維基百科上的the stack overflow這樣的例子嗎?

+0

我確實看過那個,這就是爲什麼我嘗試了所有A的原因。似乎任何大於緩衝區的輸入都會覆蓋下一個東西,但我猜不是。我通過objdump -d運行,並通過運行程序的gdb,所以我知道內存佈局,然後它將堆棧,然後計數器我然後兩個地址,然後保存的ebp然後返回地址。 – Robert 2011-05-07 12:55:33