当前位置: 首页 > 面试题库 >

在gdb下运行时,SSL_library_init导致SIGILL

叶俊郎
2023-03-14
问题内容

尝试使用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下运行这样的程序?


问题答案:

SSL_library_init在gdb下运行时会导致SIGILL …

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

有关更多详细信息,请参见OpenSSL
FAQ中的第17项:调试时,在OpenSSL初始化期间观察到SIGILL:为什么?。



 类似资料:
  • 摘要:从正在运行的Java程序加载jar会导致由类间依赖(例如语句)引起的引起的。我如何绕过它? 更详细的问题是: 我试图通过自己的Java程序将jar文件(我们称之为“服务器”)以编程方式加载到Java虚拟机中(我们称之为“ServerAPI”),并使用扩展和其他一些技巧来修改服务器的行为并与之交互。ServerAPI依赖于服务器,但如果服务器不存在,ServerAPI仍然必须能够从网站上运行和

  • 我在所有项目(平台共享)中将我的Xamarin. form包更新到最新(2.3.4.224),现在我似乎不应该再使用或枚举,因为它们已被弃用。 编译器因为这些行而抱怨: 上面写着: "Device.OS已过时。请改用Runtime平台" 到目前为止一切都很好,现在我想解决这个问题,我一直在尝试使用: 但它抛出了一个运行时异常。这是堆栈跟踪 04-08 14:57:34.812 I/MonoDroi

  • 我使用以下spock依赖项 我写了这个测试 测试成功 现在我想使用Spring在规范中注入用注释,并在运行应用程序时成功注入。测试和组件都放在同一个maven模块中。 我在这里阅读了关于:如何将Spring bean注入spock测试 因此我添加了这个依赖版本 在添加了运行s的依赖后 然后我尝试使用适当的注释 结果仍然是上述例外。 groovy测试在下,这是一个可以在第一次成功运行测试时看到的工作

  • 我在一个字符串集合中循环(看起来像“图1”),查找Word文档中出现的每个字符串,并尝试在每个字符串上插入对标题的交叉引用(我的标题遵循此模式“图1[00:01:20]”)。由于某些原因,它在包含“InsertCrossReference”方法的行上完全失败(抛出运行时错误4198,消息为“Command failed”)。到目前为止,我的部分代码如下: 我试图调查,发现“UBound(Activ

  • 本文我们将看看如何使用GDB来对iOS应用进行运行时分析。 在前面的文章中,我们已经查看了如何使用Cycript来分析和操作iOS应用的运行时行为。我们学习了如何执行method swizzling,并且调用我们自己的方法而不是原来的实现。因此,为什么我们还需要GDB呢?Cycript并不运行我们设置断点,不允许在某个特定指令后修改变量和寄存器的值。用GDB,我们可以更深入应用,观察底层的汇编指令

  • 我已经在 Android 4.3 低功耗蓝牙示例中实现了代码来查找设备。 我的舱单包括: 并且该设备是Nexus 4,已使用出厂4.3映像进行切换。 我曾经让这个东西工作过一次,但在后续运行中,我得到以下错误: