C语言 在openssl中使用protobuf生成的文件链接程序核心

h4cxqtbf  于 10个月前  发布在  其他
关注(0)|答案(2)|浏览(99)

我在属性构造函数“ConnectionInit”文件中有这样的代码,用C编写。

SSL_load_error_strings();
SSL_library_init();
DefaultSSLConnectionContext = SSL_CTX_new(SSLv23_client_method ());

字符串
当我将它与protobuf生成的pb.cc文件链接时(不调用它的代码,只是链接),它的核心是这样的转储:

#0 0x00007f269454acea in pthread_rwlock_wrlock () from /lib64/libpthread.so.0
#0 0x00007f269454acea in pthread_rwlock_wrlock () from /lib64/libpthread.so.0
#1 0x00007f26843dbcbb in ?? () from /usr/lib64/libcrypto.so.10
#2 0x00007f26843dba0b in ?? () from /usr/lib64/libcrypto.so.10
#3 0x00007f26843db3bc in ?? () from /usr/lib64/libcrypto.so.10
#4 0x00007f26843dc9b1 in ERR_load_ERR_strings () from /usr/lib64/libcrypto.so.10
#5 0x00007f26843dcb99 in ERR_load_crypto_strings () from /usr/lib64/libcrypto.so.10
#6 0x00007f268471ced9 in SSL_load_error_strings () from /usr/lib64/libssl.so.10
#7 0x00007f26778414f9 in ConnectionInit (verbose=0) at connection.c:79
#8 0x00007f2695a5f74f in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2
#9 0x00007f2695a63f75 in dl_open_worker () from /lib64/ld-linux-x86-64.so.2
#10 0x00007f2695a5f366 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#11 0x00007f2695a6371a in _dl_open () from /lib64/ld-linux-x86-64.so.2
#12 0x00007f2693fa8f66 in dlopen_doit () from /lib64/libdl.so.2
#13 0x00007f2695a5f366 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
#14 0x00007f2693fa929c in _dlerror_run () from /lib64/libdl.so.2
#15 0x00007f2693fa8ee1 in dlopen@@GLIBC_2.2.5 () from /lib64/libdl.so.2


我检查了,如果protobuf使用libssl。但它没有。*. pb.cc文件如何影响我的openSSL初始化?

42fyovps

42fyovps1#

您需要在SSL_load_error_strings()之前调用SSL_library_init()

zzoitvuj

zzoitvuj2#

protobuf文件的存在并不是导致崩溃的原因。更有可能的是,你在某个地方有一个微妙的bug,它导致了一次无效的内存访问。巧合的是,当你的程序在没有. www.example.com文件的情况下编译时,内存访问并没有造成任何伤害pb.cc,但是当你添加.pb.cc文件时,有些东西会移动,现在错误的内存访问正在造成损害。也许你会发现对代码的其他小修改也会导致bug的出现和消失。
要调试内存违规,我强烈建议使用Valgrind。您所要做的就是安装Valgrind并运行valgrind myprogram,它会告诉您非法内存访问发生在哪里。

相关问题