2012-07-07 20 views
10

Uczę się używać gdb i przeprowadzam kilka losowych testów. Warto wspomnieć, że korzystam z przenośnej instalacji MinGW na Windows 7 x64. Stworzyłem program, o którym wiem, że powoduje przepełnienie stosu, a gdy go przepuszczam w gdb, najpierw otrzymuję dwa sygnały SIGSEGV (bez zaskoczenia), a następnie wychodzę (znowu bez zaskoczenia) z kodem 030000000375.gdb: Program zakończony kodem 030000000375

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

Ciekawość przynosi mi to, co najlepsze ... co to za kod? Przeszukałem go i znalazłem bardzo niewiele.

Dzięki!

UPDATE: Dla odniesienia próbowałem ten sam program na Ubuntu, a wyniki są nieco inne:

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

Czy zawsze otrzymujesz ten sam kod? Jeśli tak, czy próbowałeś zmienić dane swojego programu i czy nadal otrzymujesz ten sam kod? – Shahbaz

Odpowiedz

10

gdb wypisuje kod wyjścia w formacie ósemkowym. Nie oczywiste, ale wskazane przez wiodący 0.

Tak 030000000375 jest 0xC00000FD w języku heksagonalnym, co sprawia, że ​​kod wygląda bardziej zwyczajnie dla programisty Windows.

0xC00000FD to STATUS_STACK_OVERFLOW i powinno być zdefiniowane w ntstatus.h.

+0

To jest bardzo dobry połów! – ArjunShankar

+1

Dobre znalezisko, dzięki! I bardzo interesujące, że system Windows faktycznie mówi, gdy pojawi się przepełnienie stosu, ale linux nie. – The111

+0

Nie ma za co! Btw: Być może powinieneś zmodyfikować temat tego pytania na "* gdb: ** Program ** zakończony kodem 030000000375 *", ponieważ nie jest to "gdb" wychodzące z tym kodem. @ The111 – alk

Powiązane problemy