我試圖對給定的易受攻擊代碼執行緩衝區溢出攻擊。 但它似乎錯了,因爲雖然我的漏洞利用字符串不會破壞堆棧,但我無法獲得我的彙編代碼(嵌入在漏洞利用字符串中)。沒有函數包含所選幀的程序計數器
這是執行我想要攻擊的程序的'ret'指令之前的一段內存值。
0x55683984: 0x5568398c 0x...(old r.a) 0x68e322a1 0x0000c31c
0x55683994: 0xf7fa9400 0x0804a3d7 0x556839c0 0xf7e518d0
在這一點上,事情出錯了,因爲它不能彈出堆棧並使%eip指向彈出的值?所以我的漏洞彙編代碼不起作用。(0x68e322a1 0x0000c31c) Gdb說沒有函數包含所選幀的程序計數器。當我試圖在不進行調試的情況下執行它時,會導致分段錯誤。
這個問題與我的程序集的長度有關嗎? (在這種情況下是6)?
Program received signal SIGSEGV, Segmentation fault.
0x5568398c in ??()
(gdb) x 0x5568398c
0x5568398c: 0x68e322a1
當我能夠看到導致段錯誤的地址內容時,會發生這種情況嗎?
你可以用'disassemble'或'X/10I $ eip',看看它segfaulted和代碼'bt'查看調用堆棧。如果你顯示你正在執行的代碼,它會更容易幫助(如果它是68 e3 ..它看起來像嵌入了零字節)。順便說一句,如果這是作業,你應該把它標記爲這樣。 – user786653
我使用佈局asm來查看發生了什麼,並沒有幫助。而且,既然我的漏洞利用代碼以c3結尾(意味着ret指令),那麼零字節就不成問題。這裏的關鍵點是我無意中嘗試訪問可能未定義的內存地址。 – bfaskiplar