>source

gdb를 사용하여 프로그램을 디버그하려고 하면 OPENSSL_cpuid_setup에서 SIGILL 보고에 실패합니다.
이 간단한 code를 사용하면 다음과 같은 동작을 합니다.

#include <openssl/ssl.h>int main()
{
    SSL_library_init();
}

컴파일 및 실행이 잘되지만 역추적 다음 gdb 보고서로 시작합니다.

Program received signal SIGILL, Illegal instruction.
0xb6b2eb40 in ?? () from /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.0.0
(gdb) where
#0  0xb6b2eb40 in ?? () from /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.0.0
#1  0xb6b2b404 in OPENSSL_cpuid_setup () from /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.0.0
#2  0xb6fdf058 in call_init (l=<optimized out>, argc=1, argv=0xbefff7d4, env=0xbefff7dc) at dl-init.c:78
#3  0xb6fdf134 in _dl_init (main_map=0xb6fff958, argc=1, argv=0xbefff7d4, env=0xbefff7dc) at dl-init.c:126
#4  0xb6fcfda4 in _dl_start_user () from /lib/ld-linux-armhf.so.3
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

이러한 프로그램을 gdb에서 어떻게 실행할 수 있습니까?

  • 답변 # 1

    Android 개발자의 경우 비활성화할 수 있습니다.시길안드로이드 스튜디오에서:

  • 답변 # 2

    여전히 GDB를 사용하고 디버그하고 싶다면 다음을 사용하여 GDB의 SIGILL을 무시할 수 있습니다.

    handle SIGILL nostop
    

  • 답변 # 3

    SSL_library_init는 gdb에서 실행할 때 SIGILL을 유발합니다...

    실제로는 항상 GDB 아래에서만 하는 것이 아닙니다. 라이브러리가 프로세서 기능을 테스트할 때 시작 code에서 정상적인 동작입니다. 발행하여 안전하게 무시할 수 있습니다.핸들 SIGILL 노스톱.

    자세한 내용은 OpenSSL FAQ의 항목 17을 참조하세요. 디버깅할 때 OpenSSL 초기화 중에 SIGILL을 관찰합니다. 이유는 무엇입니까?.

  • 답변 # 4

    BBB에서도 비슷한 상황이 발생했습니다. 그러나 신호를 무시하고 계속하면 프로세스가 정상적으로 진행됩니다. 이유는 모르겠지만 이 상황에서는 신호를 무시해도 될 것 같습니다.

  • 이전 Python -개인 정적 메서드에서 클래스 var 설정
  • 다음 api : Kotlin의 x-www-form-urlencoded 요청에서 Url의 Post 요청 본문을 추가하는 방법은 무엇입니까?