2012-01-25 59 views
0

我正在用Valgrind的一個奇怪的錯誤上的程序使用的加密+的zlib的功能:的valgrind:擾亂加密++ zlib的測試

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) 

我知道,加密++使用在某些地區一些手工編寫的彙編加快事情了,而且我讀過從0xC5開始的指令在編譯代碼中永遠不會出現。這可能是由於一個手工編碼組件的彙編指令嗎?如果是這樣,我可以通過valgrind禁用此項檢查,以便我可以繼續測試我的程序嗎?

回答

1

這是一個AVX指令。 Valgrind does not currently support AVX instructions,但AVX支持正在開發中。因爲valgrind通過模擬每條指令來工作,所以它不僅僅是一種檢查,除非您希望它直接跳轉到實際的指令,這會在剩下的執行中完全禁用valgrind。

+0

感謝您的澄清。我現在通過使用不同的庫來避免它。 – Ben