我遇到過兩種錯誤,一種是段錯誤,另一種是檢測到堆棧粉碎。我想知道他們之間有什麼不同以及造成他們不同的原因。檢測到段錯誤和Stack粉碎的區別
3
A
回答
1
分段故障是由硬件具有存儲器保護提出了一個故障,通知操作系統(OS)有關的存儲器訪問衝突。當程序調用堆棧中的數據溢出時,會報告堆棧粉碎。通常程序的調用堆棧是固定長度的。
7
這通常是未定義的行爲。
段錯誤通常是當你的進程訪問的內存位置,它沒有權限訪問,或位置不存在。
堆棧粉碎是,發出警告接入出界,例如,在堆棧上的警報(與gcc例如生成)。通常情況下,當堆棧被寫入它不應該存在的地方時就會發生這種情況 - 就像寫入索引越界的本地數組一樣。
您的代碼存在產生未定義行爲的問題。也許你可以與我們分享,這樣我們可以幫助你。
檢查特別是:
- 出數組邊界的訪問
- NULL指針
2
堆棧溢出和堆棧溢出這兩個問題都涉及到有故障的代碼或值在變量中。 例如,當一個循環中運行作爲它額外的陣列的指數輾過和 覆蓋碼的另一個變量的值,然後,它成爲問題 給函數序言和結尾繼續下一個功能因此電流函數成爲無法返回calle函數,因爲llop的溢出只覆蓋了calle指令的返回地址,因此EIP指向某處不允許獲取指令。所有進入OS的代碼都在內存保護方案中運行,因此您得到堆棧溢出或堆棧粉碎。 分割錯誤是在Linux操作系統中處理數組和指針時出現問題的正常情況。 試試這個http://www.drdobbs.com/security/anatomy-of-a-stack-smashing-attack-and-h/240001832
1
兩者都是內存訪問衝突。 分段錯誤更一般,意味着你正在訪問你不允許的東西。 堆棧粉碎更具體,意味着你的堆棧有問題。實際上,堆棧粉碎會導致分段錯誤。 你可以參考: https://en.wikipedia.org/wiki/Segmentation_fault 或 Stack smashing detected
相關問題
- 1. Swift和Stack粉碎保護
- 2. 堆棧粉碎檢測後分段錯誤
- 3. c堆棧粉碎檢測
- 4. 堆棧粉碎檢測到C
- 5. 檢測到C堆棧粉碎
- 6. 如何檢測堆棧粉碎錯誤的問題代碼
- 7. 下面的代碼給我錯誤***堆棧粉碎檢測***:
- 8. 爲什麼粉碎後不立即出現「檢測到堆棧粉碎」?
- 9. 找不到一個粉碎的堆棧段錯誤
- 10. C snprintf sprintf堆棧粉碎檢測
- 11. C結構錯誤:檢測到堆棧粉碎,中止(核心轉儲)
- 12. 調用msgrcv函數後檢測到堆棧粉碎
- 13. 堆棧粉碎在檢測客戶端服務器中檢測到C
- 14. Step Out和Call Stack之間的區別
- 15. 堆棧粉碎和sscanf
- 16. 設計粉碎到角PyQT5
- 17. STACK和TOP_STACK有什麼區別?
- 18. 使用C9.io和C++堆棧粉碎錯誤
- 19. 堆棧粉碎測試環境
- 20. 粉碎堆棧檢測程序終止在c
- 21. ***堆棧粉碎檢測***在一個C++數組程序
- 22. Stack Stack in Empty EmptyStackException錯誤
- 23. gtk_container_add粉碎在mac
- 24. 特徵檢測和對象檢測的區別
- 25. glibc檢測到的錯誤
- 26. 堆棧保護和使用GCC粉碎
- 27. Python和psycopg檢測到網絡錯誤
- 28. 堆棧粉碎後如何處理錯誤信息
- 29. 指針指針數組&堆棧粉碎錯誤
- 30. Stack Overflow錯誤android?
使用金絲雀砸檢測是不能疊加? – Qix