2012-07-07 31 views
10

我在教自己使用gdb並運行一些隨機測試。值得一提的是,我在Windows 7 x64上使用了MinGW的便攜式安裝。我創建了一個程序,我知道堆棧溢出的結果,當我在gdb中運行它時,首先得到兩個SIGSEGV信號(沒有意外),然後用代碼030000000375退出(再次沒有意外)。gdb:使用代碼退出的程序030000000375

Program received signal SIGSEGV, Segmentation fault. 
Program received signal SIGSEGV, Segmentation fault. 
Program exited with code 030000000375. 

好奇心得到我最好的...這是什麼代碼?我搜索了它,發現很少。

謝謝!

更新:對於參考我試圖在Ubuntu相同的程序,其結果是稍有不同:

Program received signal SIGSEGV, Segmentation fault. 
Program terminated with signal SIGSEGV, Segmentation fault. 
The program no longer exists. 
+0

你總是得到相同的代碼嗎?如果是這樣,你有沒有試過改變你的程序的數據,看看你是否仍然得到相同的代碼? – Shahbaz 2012-07-08 21:49:39

回答

10

gdb打印出以八進制格式的退出代碼。不明顯,但由領先的0表示。

所以030000000375是十六進制的0xC00000FD,這使得代碼看起來更像Windows程序員的共同點。

0xC00000FDSTATUS_STACK_OVERFLOW並且應該在ntstatus.h中定義。

+0

這是一個很好的抓住! – ArjunShankar 2012-07-09 15:00:35

+1

好找,謝謝!而且非常有趣的是,Windows實際上會告訴你什麼時候出現堆棧溢出,但linux不會。 – The111 2012-07-09 16:40:00

+0

歡迎您!順便說一句:也許你應該修改這個問題的主題爲「* gdb:** Program **退出代碼030000000375 *」,因爲它不是'gdb'退出該代碼。 @ The111 – alk 2012-07-09 16:47:04