2016-02-03 31 views

回答

1

分段故障是由硬件具有存儲器保護提出了一個故障,通知操作系統(OS)有關的存儲器訪問衝突。當程序調用堆棧中的數據溢出時,會報告堆棧粉碎。通常程序的調用堆棧是固定長度的。

7

這通常是未定義的行爲。

  • 段錯誤通常是當你的進程訪問的內存位置,它沒有權限訪問,或位置不存在。

  • 堆棧粉碎是,發出警告接入出界,例如,在堆棧上的警報(與gcc例如生成)。通常情況下,當堆棧被寫入它不應該存在的地方時就會發生這種情況 - 就像寫入索引越界的本地數組一樣。

您的代碼存在產生未定義行爲的問題。也許你可以與我們分享,這樣我們可以幫助你。

檢查特別是:

  • 出數組邊界的訪問
  • NULL指針
+0

使用金絲雀砸檢測是不能疊加? – Qix

2

堆棧溢出和堆棧溢出這兩個問題都涉及到有故障的代碼或值在變量中。 例如,當一個循環中運行作爲它額外的陣列的指數輾過和 覆蓋碼的另一個變量的值,然後,它成爲問題 給函數序言和結尾繼續下一個功能因此電流函數成爲無法返回calle函數,因爲llop的溢出只覆蓋了calle指令的返回地址,因此EIP指向某處不允許獲取指令。所有進入OS的代碼都在內存保護方案中運行,因此您得到堆棧溢出或堆棧粉碎。 分割錯誤是在Linux操作系統中處理數組和指針時出現問題的正常情況。 試試這個http://www.drdobbs.com/security/anatomy-of-a-stack-smashing-attack-and-h/240001832