我已经集成了用于TLS安全的botan库。
我得到以下错误:

jsonrpctest.exe中0x6DBFD1CE(vcruntime140.dll)的首次机会异常:0xC0000005:访问冲突读取位置0x00962000。
如果有此异常的处理程序,则程序可以安全地继续

下面是我正在调用的代码

int main(int argc, char *argv[])
{
// prepare all the parameters
Callbacks callbacks;
Botan::AutoSeeded_RNG rng;
Botan::TLS::Session_Manager_In_Memory session_mgr(rng);
Client_Credentials creds;
Botan::TLS::Strict_Policy policy;

// open the tls connection : Error comes here
Botan::TLS::Client client(callbacks,
    session_mgr,
    creds,
    policy,
    rng,
    Botan::TLS::Server_Information("10.193.252.14", 43733),
    Botan::TLS::Protocol_Version::TLS_V12);

while (!client.is_closed())
{
    //cout << client.is_active;
    // read data received from the tls server, e.g., using BSD sockets or
 boost asio
    // ...

    // send data to the tls server using client.send_data()
} }

最佳答案

此错误的确切原因未知。我认为这可能是Visual Studio的构建标志。我在发布的版本中遇到类似的错误,但在调试版本中工作正常。然后,我将其构建为库(DLL)而不是应用程序(.exe),但没有发现任何问题。我认为使用Botan的最佳方法是进行合并构建(即不使用Botan DLL库,而是将Botan代码导入您的应用程序然后使用它)。这是对我有用的构建命令(从Botan源文件夹运行):

configure.py --cpu=i386 --amalgamation --single-amalgamation-file --minimized-build --enable-modules=tls,x509,seed,rdseed,rdrand,rdrand_rng,auto_rng --disable-shared

运行上述命令之前,您需要先安装Python并在路径中。
上面的命令将在Botan源代码目录中生成以下文件(即运行上面命令的路径相同):

botan_all.h,botan_all_internal.h和botan_all.cpp

您需要将这些文件包含在您的应用程序代码中,并加以使用和构建。

有关Botan合并构建的更多信息:https://botan.randombit.net/manual/building.html#amalgamation

关于c++ - 使用Botan访问冲突读取位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46903283/

10-11 15:41