【发布时间】:2014-07-18 15:04:44
【问题描述】:
我正在尝试调试来自 Crypto++ 库的一些代码,但在会话期间我得到了无意义的信息。
感兴趣的函数是DEREncodePrivateKey。它是DL_PrivateKey_EC<T> 上的成员函数(Crypto++ 是大量模板化的)。
228 pk.DEREncodePrivateKey(encoder);
(gdb) s
non-virtual thunk to CryptoPP::DL_PrivateKey_EC<CryptoPP::ECP>::DEREncodePrivateKey(CryptoPP::BufferedTransformation&) const
(this=0x7fff5fbfeca0, bt=@0x7fff5fbfe540) at dll.cpp:690
Line number 690 out of range; dll.cpp has 146 lines.
dll.cpp可以在trunk / c5 / dll.cpp找到,它只报告了146行ad gdb。
对象是dynamic_cast,就在相关行之前:
const PKCS8PrivateKey& pk = dynamic_cast<const PKCS8PrivateKey&>(key);
我从 -O0 -g3 的源代码构建了这个库,所以我认为我将一些/大部分典型问题降到最低。
我尝试使用不同的编译器(g++ 和 clang++)构建库和我的测试程序,并且尝试使用不同的调试器(gdb 和 lldb)对其进行调试。但我仍然得到无意义的信息,图书馆不能踏入这方面。其他区域都OK(可以看到之前的issue)。
我也确定我正在使用我的库版本。它使用库的完整路径作为静态库链接,info shared 确认 Apple 没有潜入动态库。
我需要去DL_PrivateKey_EC<CryptoPP::ECP>::DEREncodePrivateKey 看看发生了什么。我认为被调用的函数在eccrypto 中,但我想在调试器下查看它。
任何想法如何进行?
【问题讨论】: