亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢測到堆棧粉碎

檢測到堆棧粉碎

C
呼喚遠方 2019-08-09 16:37:47
檢測到堆棧粉碎我正在執行我的a.out文件。執行后程序運行一段時間然后退出并顯示以下消息:**** stack smashing detected ***: ./a.out terminated**======= Backtrace: =========**/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted*可能的原因是什么?如何糾正?
查看完整描述

3 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

這里的Stack Smashing實際上是由于gcc用來檢測緩沖區溢出錯誤的保護機制引起的。例如,在以下代碼段中:

#include <stdio.h>void func(){
    char array[10];
    gets(array);}int main(int argc, char **argv){
    func();}

編譯器(在本例中為gcc)添加了具有已知值的保護變量(稱為canaries)。大小大于10的輸入字符串會導致此變量損壞,從而導致SIGABRT終止程序。

為了獲得一些見解,您可以嘗試 -fno-stack-protector 在編譯時使用選項禁用gcc的這種保護 。在這種情況下,當您嘗試訪問非法內存位置時,您將收到不同的錯誤,很可能是分段錯誤。請注意,-fstack-protector應始終為發布版本打開,因為它是一種安全功能。

您可以通過使用調試器運行程序來獲取有關溢出點的一些信息。Valgrind與堆棧相關的錯誤不能很好地工作,但是像調試器一樣,它可以幫助你精確定位崩潰的位置和原因。


查看完整回答
反對 回復 2019-08-09
  • 3 回答
  • 0 關注
  • 816 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號