2012-07-07 16 views
10

Tôi tự dạy mình sử dụng gdb và đang chạy một số thử nghiệm ngẫu nhiên. Có thể đáng nói đến là tôi đang sử dụng một cài đặt di động của MinGW trên Windows 7 x64. Tôi đã tạo ra một chương trình mà tôi biết kết quả trong một ngăn xếp tràn, và khi tôi chạy qua nó trong gdb tôi lần đầu tiên nhận được hai tín hiệu SIGSEGV (không ngạc nhiên), và sau đó nó thoát (không ngạc nhiên) với mã số 030000000375.gdb: Chương trình đã thoát với mã 030000000375

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

Sự tò mò nhận được điều tốt nhất của tôi ... mã đó là gì? Tôi googled nó và tìm thấy rất ít.

Cảm ơn!

UPDATE: Để tham khảo tôi đã cố gắng cùng một chương trình trên Ubuntu, và kết quả là hơi khác nhau:

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

Bạn luôn nhận được cùng một mã? Nếu vậy, bạn đã thử thay đổi dữ liệu của chương trình của mình chưa và xem liệu bạn có nhận được cùng mã không? – Shahbaz

Trả lời

10

gdb in ra mã lối ra ở định dạng bát phân. Không rõ ràng, nhưng được biểu thị bằng số 0 hàng đầu.

Vì vậy, 0300000003750xC00000FD trong hex, làm cho mã trông phổ biến hơn nhiều đối với người lập trình Windows.

0xC00000FDSTATUS_STACK_OVERFLOW và phải được xác định trong ntstatus.h.

+0

Đây là một đánh bắt rất tốt! – ArjunShankar

+1

Tìm tốt, cảm ơn! Và rất thú vị mà Windows thực sự nói với bạn khi bạn nhận được một tràn ngăn xếp, nhưng Linux thì không. – The111

+0

Bạn được hoan nghênh! Btw: Có lẽ bạn nên sửa đổi chủ đề của câu hỏi này thành "* gdb: ** Program ** đã thoát với mã 030000000375 *" vì nó không phải là 'gdb' thoát với mã này. @ The111 – alk