2015-11-28 77 views
1

我想運行的程序來測試緩衝區溢出,但程序崩潰時,它顯示我SIGSEGV錯誤如下:SIGSEGV段錯誤,不同的消息

計劃接收信號SIGSEGV,分割過錯。 0x00000000004006c0在主(argc個= 2,的argv = 0x7fffffffde78)

但其中我下面是獲得下面的消息教程:

計劃接收信號SIGSEGV,分割故障。在0x41414141? ()

由於這個原因,我無法獲得緩衝區溢出的確切位置。

我編譯我的程序時已經使用了-fno-stack-protector。因爲在此之前我得到了SIGABRT錯誤。

有沒有人有任何線索,以便我可以與教程同步。

+0

想想_ ** undefined ** behaviour_!的含義! – Olaf

+0

@Olaf想想這個問題是關於*實際發生了什麼*而不是*根據C標準*應該發生的事實! – immibis

+0

哪個教程? –

回答

2

我能弄清楚兩者的區別。

其實我是在虛擬盒子上的Ubuntu 64位上嘗試相同的代碼。 但後來我嘗試在虛擬盒上安裝Ubuntu 32位,所以現在我也得到了與本教程中提供的內容相同的消息。

而且我在64位和32位操作系統注意到另一個不同之處在於,使用32位的時候,我們可以檢查使用$ ESP但在64位機,我們必須使用堆棧$ RSP

0

SIGSEGV是當程序嘗試訪問不應該執行的內存位置時引發的信號。兩種典型的情況是:

  • 推斷一個非初始化指針。
  • 訪問數組越界。

但是請注意,即使是在這兩種情況下,有沒有保證SIGSEGV總是發生。因此,即使使用相同的代碼,也不要指望SIGSEGV消息始終保持不變。

+0

你是對的,但你是否看到我發佈在我的問題中的兩條消息的內存模式的差異。 – TechJ

+0

你的意思是虛擬地址是不同的? – artm

+0

沒錯,我怎樣才能得到地址相同的模式,在教程 – TechJ