2016-04-18 14 views
1

OpenSSLを使用してサーバーへの接続を保護するC++ DLLを作成しようとしています。VisualS ++ DLLのOpenSSL

私はgenuinlyこのコード

#include "stdafx.h" 
#include <string.h> 
#include <iostream> 
//SSL stuff 
#include <openssl/ssl.h> 
#include <openssl/err.h> 
#include <openssl/pem.h> 
#include <openssl/x509.h> 
#include <openssl/x509_vfy.h> 
#include <openssl/ossl_typ.h> 
#include <openssl/applink.c> 
//Winsock stuf 
#pragma comment(lib, "ws2_32.lib") 
{... Create a method in which we set up the SSL connection ...} 
char* tSend = "{\"reqtype\":\"keyexchange\"}"; 
int sendSize = strlen(tSend); 
int net_tSend = htonl(sendSize); 
SSL_write(ssl, &net_tSend, 4); 
SSL_write(ssl, tSend, sendSize); 

は、コンソールアプリケーションでは正常に動作しますが、私のDLLでクラッシュしたという事実によって困惑しています。 TestsForPKCSDLL.exeに0x00007FF865207DA0(libeay32.dll)で投げ

例外:0xc0000005で:アクセス違反読み取り場所0x0000000000000000 は、ここに私の例外です。

ありがとうございます。

+0

デバッガはあなたに何を伝えますか? –

+2

0に近い/近くのアドレスにアクセスするときのアクセス違反は、NULLポインタがアクセスされていることを意味します。あなたのコードでNULLポインタを見つけて修正してください。最も有望なのはあなたの 'ssl'ポインタか、リンクされている' SSL_CTX'や 'BIO'です。 –

+0

まさに、あなたは困惑しているのですか? – jww

答えて

0

少しの研究の後、問題はhtonl()関数から来ているようです。

u_long mylong = 10L; 
    int net_tSend = htonl(mylong); 

TestsForPKCSDLL.exeに0x00007FF863807DA0(libeay32.dll)でスローされる例外:0xc0000005で:アクセス違反読取位置0x0000000000000000。

明らかに正しく読み込まれていないようです。私のコードはDLL内にあるので、呼び出し元のプログラムがSSL dllを参照していないとクラッシュすると思います。 libeay32とssleay32を静的にリンクしようとします。