valgrind:破坏crypto++zlib测试
valgrind: Disrupting crypto++ zlib test
我在一个使用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目前不支持AVX指令,但AVX支持正在开发中。因为valgrind是通过模拟每个指令来工作的,所以它不仅仅是一个检查,除非你想让它直接跳到实际指令,否则你可以绕过它,这将在剩余的执行过程中完全禁用valgrind。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 为char数组调整zlib-zpipe
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 基于boost的程序的静态链接——zlib问题
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为测试目标创建具有不同源文件夹的文件
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 换位表导致测试失败(但在游戏中运行良好)
- 用于交叉编译和CMake的预处理器宏的单元测试
- 构建和链接 Crypto++ 的测试代码
- valgrind:破坏crypto++zlib测试