【问题标题】:SSL_library_init cause SIGILL when running under gdbSSL_library_init 在 gdb 下运行时导致 SIGILL
【发布时间】:2014-10-31 18:23:54
【问题描述】:

尝试使用 gdb 调试程序时,在 OPENSSL_cpuid_setup 中报告 SIGILL 失败。
使用这个简单的代码,我有相同的行为:

#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 下运行这样的程序?

【问题讨论】:

    标签: c linux openssl gdb raspberry-pi


    【解决方案1】:

    SSL_library_init 在 gdb 下运行时导致 SIGILL...

    它实际上一直都在这样做,而不仅仅是在 GDB 下。这是启动代码中的正常行为,因为库测试处理器功能。您可以通过发出handle SIGILL nostop 放心地忽略它。

    有关详细信息,请参阅 OpenSSL 常见问题解答中的第 17 项:When debugging I observe SIGILL during OpenSSL initialization: why?

    【讨论】:

      【解决方案2】:

      我在 BBB 也遇到过类似的情况。但是,如果我忽略该信号并继续,该过程将正常进行。我不知道为什么,但在这种情况下似乎可以忽略信号。

      【讨论】:

        【解决方案3】:

        如果您仍想使用 GDB 并使用它进行调试,则可以通过以下方式忽略 GDB 的 SIGILL:

        handle SIGILL nostop
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-18
          • 1970-01-01
          相关资源
          最近更新 更多