openssl/valgrind

openssl/valgrind,openssl,valgrind,Openssl,Valgrind,我有一个应用程序,必须计算文件的MD5,我有 使用openssl库时,valgrind抱怨仍然存在一些块 可达的 编译以下代码: #include <openssl/bio.h> int main(int, char**) { BIO * mem = BIO_new(BIO_s_mem()); BIO_vfree(mem); return 0; } 有没有人有过相同的经历?OpenSSL的操作在未使用-DPURIFY编译时会混淆Valgrind 我相信这些是op

我有一个应用程序,必须计算文件的MD5,我有 使用openssl库时,valgrind抱怨仍然存在一些块 可达的

编译以下代码:

#include <openssl/bio.h>

int main(int, char**)
{
   BIO * mem = BIO_new(BIO_s_mem());
   BIO_vfree(mem);
   return 0;
}

有没有人有过相同的经历?

OpenSSL的操作在未使用-DPURIFY编译时会混淆Valgrind

我相信这些是openssl分配的一些静态结构。我运行了您的代码,我运行了以下代码,valgrind报告说,两者的未混合内存量相同:

#include <openssl/bio.h>

int main(int, char**)
{
   BIO * mem = BIO_new(BIO_s_mem());
   BIO * mem2 = BIO_new(BIO_s_mem());
   BIO * mem3 = BIO_new(BIO_s_mem());
   BIO * mem4 = BIO_new(BIO_s_mem());
   BIO_vfree(mem);
   BIO_vfree(mem2);
   BIO_vfree(mem3);
   BIO_vfree(mem4);
   return 0;
}
#包括
int main(int,char**)
{
BIO*mem=BIO_new(BIO_s_mem());
BIO*mem2=BIO_new(BIO_s_mem());
BIO*mem3=BIO_new(BIO_s_mem());
BIO*mem4=BIO_new(BIO_s_mem());
生物自由基(mem);
BIO_vfree(mem2);
BIO_vfree(mem3);
BIO_vfree(mem4);
返回0;
}

~

OpenSSL包含许多未初始化的变量,变量和内存从未被释放,变量从未被清除,在范围之外无法访问,甚至无法手动释放。 Valgrind发现了很多这样的东西

PURIFY标志仅与rand()函数相关。因此,为了避免Purify中的检测,如果设置了该标志,Openssl实际上会使用不同的源代码。很好的编码。。。也许最好先解决这个问题

BIO_new() -> BIO_set() -> CRYPTO_new_ex_data() -> int_new_ex_data() -> def_get_class()
int_new_ex_data()不要释放def_get_类malloced的内存

见:

作为不使用-DPURIFY的示例,请参见(我并不是说在不使用-DPURIFY的情况下运行valgrind会直接导致错误,但它确实会导致人们采取最终导致错误的操作)。:-P
BIO_new() -> BIO_set() -> CRYPTO_new_ex_data() -> int_new_ex_data() -> def_get_class()