You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

程序在libcrypto.so.3中崩溃,如何进行调试排查?

程序调用libcrypto.so.3崩溃的调试排查指导

崩溃日志

1: 2023-09-01 13:36:59 被终止的守护进程是/bin/xxq:
2: 2023-09-01 13:36:59 被终止的守护进程是/bin/aad:
5: 2023-09-01 13:40:25 <03376> 固件 TEST-VM64-KVM
6: 2023-09-01 13:40:25 (Debug)
7: 2023-09-01 13:40:25 <03376> 应用程序 newtest
8: 2023-09-01 13:40:25 <03376> *** 收到signal 11 (Segmentation fault) ***
9: 2023-09-01 13:40:25 <03376> 寄存器转储:
10: 2023-09-01 13:40:25 <03376> RAX: 0000000000000009   RBX: 00007fe47d87b000
11: 2023-09-01 13:40:25 <03376> RCX: 00007fe47d87b130   RDX: fffffffffffd9ef0
12: 2023-09-01 13:40:25 <03376> R08: 00007fe47d87b094   R09: 0000000004400000
13: 2023-09-01 13:40:25 <03376> R10: 0000000000000009   R11: 00007ffee143ede8
14: 2023-09-01 13:40:25 <03376> R12: 00007ffee143ef14   R13: 00007ffee143ee70
15: 2023-09-01 13:40:25 <03376> R14: 0000000000000010   R15: fffffffffffffff5
16: 2023-09-01 13:40:25 <03376> RSI: 0000000011067fd0   RDI: 0000000011067d50
17: 2023-09-01 13:40:25 <03376> RBP: 0000000011067d50   RSP: 00007ffee143edd0
18: 2023-09-01 13:40:25 <03376> RIP: 00007fe4832f6d2e   EFLAGS: 0000000000010293
19: 2023-09-01 13:40:25 <03376> CS:  0033   FS: 0000   GS: 0000
20: 2023-09-01 13:40:25 <03376> Trap: 000000000000000e   Error: 0000000000000006
21: 2023-09-01 13:40:25 <03376> OldMask: 0000000000000000
22: 2023-09-01 13:40:25 <03376> CR2: 0000000011068000
23: 2023-09-01 13:40:25 <03376> 栈: 0x7ffee143edd0 - 0x7ffee14589c0
24: 2023-09-01 13:40:25 <03376> 回溯信息:
25: 2023-09-01 13:40:25 <03376> [0x7fe4832f6d2e] => /usr/lib/x86_64-linux-gnu/libcrypto.so.3
26: 2023-09-01 13:40:25 liboffset 000cbd2e
27: 2023-09-01 13:40:25 <03376> [0x7fe48351432c] => /usr/lib/x86_64-linux-gnu/libcrypto.so.3
28: 2023-09-01 13:40:25 liboffset 002e932c
29: 2023-09-01 13:40:25 <03376> [0x7fe48356172c] => /usr/lib/x86_64-linux-gnu/libcrypto.so.3
30: 2023-09-01 13:40:25 liboffset 0033672c
31: 2023-09-01 13:40:25 <03376> [0x7fe48341a60e] => /usr/lib/x86_64-linux-gnu/libcrypto.so.3
32: 2023-09-01 13:40:25 (EVP_DecryptUpdate+0x0000009e) liboffset 001ef60e

调试排查步骤

1. 定位libcrypto内崩溃的具体函数

用addr2line工具将日志中的偏移地址转换为具体的源文件和行号:

addr2line -e /usr/lib/x86_64-linux-gnu/libcrypto.so.3 0x000cbd2e 0x002e932c 0x0033672c 0x001ef60e

通过输出结果明确崩溃在libcrypto内部的逻辑位置。

2. 用GDB进行实时调试

  • 确保程序编译时添加了-g参数生成调试符号,启动GDB:
    gdb ./newtest
    
  • 设置断点并运行程序,崩溃后查看完整调用栈:
    b EVP_DecryptUpdate
    run
    bt
    
  • 用info registers查看寄存器状态,结合CR2值(0x0000000011068000)检查该内存地址是否合法,排查野指针、已释放内存访问或越界问题。

3. 检查OpenSSL上下文与调用流程

  • 确认EVP_CIPHER_CTX对象是否通过EVP_CIPHER_CTX_new()正确初始化,且未被提前释放。
  • 验证EVP_DecryptUpdate的传入参数:输入输出缓冲区是否有效、长度参数是否合理,避免缓冲区越界。
  • 核对解密流程顺序:是否先调用EVP_DecryptInit_ex初始化上下文,再执行EVP_DecryptUpdate,无重复初始化或上下文篡改情况。

4. 检测内存异常

用valgrind检查内存问题:

valgrind --leak-check=full ./newtest

重点关注OpenSSL相关对象的内存操作,排查内存泄漏、野指针、越界访问等问题。

5. 验证OpenSSL版本兼容性

  • 查看系统中libcrypto版本:
    openssl version
    
  • 检查程序运行时依赖的libcrypto路径是否正确:
    ldd ./newtest
    

确保编译时依赖的OpenSSL版本与运行时加载的版本一致,避免版本不兼容问题。

内容的提问来源于stack exchange,提问作者louis wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:42:02