c++ - valgrind:中断 crypto++ zlib 测试

标签 c++ valgrind crypto++

我在使用 Crypto++ 的 zlib 函数的程序中遇到 valgrind 的奇怪错误:

vex x86->IR: unhandled instruction bytes: 0xC5 0xF9 0x6E 0x45
==8605== valgrind: Unrecognised instruction at address 0x814c88b.
==8605==    at 0x814C88B: CryptoPP::ByteQueue::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::string const&, bool) (misc.h:189)
==8605==    by 0x814C3E6: CryptoPP::ByteQueue::Get(unsigned char*, unsigned int) (cryptlib.h:901)
==8605==    by 0x815DAAE: CryptoPP::ZlibDecompressor::ProcessPoststreamTail() (zlib.cpp:84)
==8605==    by 0x815B6EC: CryptoPP::Inflator::ProcessInput(bool) (zinflate.cpp:349)
==8605==    by 0x815BC25: CryptoPP::Inflator::Put2(unsigned char const*, unsigned int, int, bool) (zinflate.cpp:295)
==8605==    by 0x805E40C: CryptoPP::BufferedTransformation::Put(unsigned char const*, unsigned int, bool) (cryptlib.h:789)

我知道 Crypto++ 在某些区域使用一些手工编码的程序集来加快速度,而且我读到以 0xC5 开头的指令从不出现在编译代码中。这可能是由于来自一段手工编码汇编的汇编指令吗?如果是这样,我能否通过 valgrind 禁用此检查,以便我可以继续测试我的程序?

最佳答案

这是一个 AVX操作说明。 Valgrind does not currently support AVX instructions ,但 AVX 支持正在开发中。因为 valgrind 是通过模拟每条指令来工作的,所以它不仅仅是一个您可以绕过的检查,除非您希望它直接跳转到实际指令,这将在剩余的执行过程中完全禁用 valgrind。

关于c++ - valgrind:中断 crypto++ zlib 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009037/

相关文章:

c++ - 链接时未定义对 CryptoPP::AlignedAllocate 的引用

c# - 如何确保可以加载 auth.dll?

C++:加入一个 WCHAR[] 数组?

c - valgrind 中的内存

c++ - cudaDecodeGL sdk 示例从 Windows 移植到 Linux 后出现内存泄漏

c++ - 从 cryptopp::integer 转换为 QString

c++ - 处理带有关联字符串的枚举的正确方法

html - 通过 tcp 和浏览器发送带有 HTTP 协议(protocol)的 html 文件显示错误

c++ - 错误 : failed to lock directory 'C:/Program Files/R/R-3.0.2/library' for modifying when installing RStan in Rstudio in Windows 7

c++ - helgrind (valgrind) 可以与 c++11 future 一起使用吗