【问题标题】:Stack frame NULL in backtrace log回溯日志中的堆栈帧 NULL
【发布时间】:2014-11-30 15:16:21
【问题描述】:

我的应用程序收到分段错误。回溯日志 -

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 () 之前就已损坏?

【问题讨论】:

  • 是的,您的堆栈帧已损坏。至少用gcc -Wall -g编译,也许也用-fsanitize=address;也使用valgrind
  • -fstack-protector-all 也可能有帮助。

标签: c gdb libcurl debug-backtrace


【解决方案1】:

#9 的堆栈帧很有趣。

不是真的。最有可能发生的是 X509_CINF_seq_tt 是手动编码的程序集,并且缺少正确的展开描述符,因此堆栈跟踪中的所有内容都是伪造的。

其实看这个sourceX509_CINF_seq_tt甚至都不是一个函数,所以可能是asn1_item_combine_free开始了“bad unwind”。

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2019-03-30
    • 1970-01-01
    • 2020-10-27
    相关资源
    最近更新 更多