【问题标题】:Access violation reading location using Botan使用 Botan 访问冲突读取位置
【发布时间】:2018-04-04 19:45:51
【问题描述】:

我已经集成了用于 TLS 安全性的植物库。 我收到以下错误:

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()
} }

【问题讨论】:

  • 您是否尝试过在调试器下运行以至少确定导致错误的特定行?
  • @pankaj 你有没有解决你的问题?我正在尝试构建和测试botan,并且我尝试运行的每个示例程序都出现“访问冲突读取位置”异常。

标签: c++ botan


【解决方案1】:

此错误的确切原因未知。我认为它的一些构建标志可能是视觉工作室。我在发布版本中遇到了类似的错误,但在调试版本中运行良好。然后我将它构建为库(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

【讨论】:

  • “这个错误的确切原因是未知的。我认为这是一些构建标志 [...] 我在发布版本中遇到了类似的错误,但它在调试中工作正常构建。然后我将其构建为库 (DLL) 而不是应用程序 (.exe),我没有发现任何问题。” 这意味着您的程序正在执行一些未定义的行为,您需要找到并修复它,而不是试图找到隐藏问题的一些深奥的构建标志组合,直到为时已晚。
  • 您在发表评论之前是否真的运行过 Botan 程序?我正在运行默认的 Botan 代码,没有进行任何修改,这给了我一个发布版本的英特尔驱动程序错误,然后是上面引用的错误。在 Visual Studio 中使用 mbedTLS 库和 jsoncpp 库时,我遇到了类似的错误。我在我的代码中成功地使用了 jsoncpp 代码作为 DLL。让我们来谈谈构建标志:您是否真的阅读过这些标志以及我在评论之前使用它的意思?构建标志用于在应用程序中使用 Botan 代码,与崩溃无关。