我正在尝试调试来自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)调试它。但我仍然得到非感性信息,图书馆不能在这个领域踩到。其他方面都可以(在问题发生之前可以看到)。
我也确定我正在使用我的库版本。它使用库的完整路径作为静态lib链接,info shared
确认Apple没有潜入动态库。
我需要步DL_PrivateKey_EC<CryptoPP::ECP>::DEREncodePrivateKey
看看发生了什么。我认为被调用的函数在eccrypto中,但我想在调试器下看到它。
任何想法如何进行?
答案 0 :(得分:1)
听起来调试信息中的行表不正确。在Mac OS X上,您可以使用dwarfdump --debug-line appname.dSYM
转储行表,或者如果您正在查看特定的目标文件dwarfdump --debug-line dll.o
。在lldb中你也可以target modules dump line-table dll.cpp
。我的猜测是,从第690行开始,您的dll.cpp
内嵌了一个头文件中的某些功能 - 但是该线条可能会错误地忘记从dll.cpp
切换到您的头文件。
你似乎不太可能从g ++和clang ++中看到同样的问题。我怀疑至少部分项目没有重建。
fwiw你可以在这里继续调试 - 唯一的问题是调试器在你逐步完成你的方法时不会向你显示源代码。但是你可以继续前进,我希望你能够立刻再次回到你的dll.cpp资源中。