2014-10-06 16 views
2

내 응용 프로그램에서 세그먼트 오류가 발생했습니다. 백 추적 로그 -백 트레이스 로그에 스택 프레임 NULL이 있습니다.

Program received signal SIGSEV, Segmentation fault. 
0x00000000004a5c03 in engine_unlocked_finish() 

(gdb) bt 

#0 0x00000000004a5c03 in engine_unlocked_finish() 
#1 0x00000000004a5d71 in ENGINE_finish() 
#2 0x000000000046a537 in EVP_PKEY_free_it() 
#3 0x000000000046a91b in EVP_PKEY_free() 
#4 0x00000000004b231a in pubkey_cb() 
#5 0x0000000000470c97 in asn1_item_combine_free() 
#6 0x0000000000750f70 in X509_CINF_seq_tt() 
#7 0x00000000010f7d90 in ??() 
#8 0x00000000010f7cf0 in ??() 
#9 0x0000000000000000 in ??() 

#9의 스택 프레임은 흥미 롭습니다. 주소는 0x0000000000000000입니다. 이것은 engine_unlocked_finish()에 도착하기 전에도 스택이 손상된 것을 의미합니까?

+2

예, 스택 프레임이 손상되었습니다. 최소한'gcc -Wall -g'로 컴파일하십시오. 아마도'-fsanitize = address'로 컴파일 할 수도 있습니다; [valgrind] (http://valgrind.org/) –

+0

'-fstack-protector-all'도 도움이 될 수 있습니다. – Tomo

답변

3

# 9의 스택 프레임은 흥미 롭습니다.

아니요. 무슨 일이 일어날 가능성이 가장 큰 것은 X509_CINF_seq_tt은 손으로 코딩 된 어셈블리이며 정확한 unwind descriptor가 부족하므로 스택 추적에서 그 이후의 모든 내용이 가짜라는 것입니다.

실제로이 source을 보면 X509_CINF_seq_tt은 기능조차되지 않으므로 아마도 "bad unwind"를 시작하는 asn1_item_combine_free 일 것입니다.