После использования pem_read_bio_pubkey я не могу разгрузить Win DllC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 После использования pem_read_bio_pubkey я не могу разгрузить Win Dll

Сообщение Anonymous »

Я работаю над Windows DLL, которая загружается сторонним исполняемым файлом. У него есть функция остановки, которая выгружает мою DLL. Я вижу это во время работы в отладчике Visual Studio:

'3rdparty.exe' (Win32): выгружен 'C:\my_dll.dll'

Теперь, если я добавлю этот код:

Код: Выделить всё

const std::string& public_key = my_public_key;
auto bio = BIO_new(BIO_s_mem());

if (!BIO_write(bio, public_key.c_str(), static_cast(public_key.size())))
{
error();
}

EVP_PKEY* pkey = nullptr;
if (!PEM_read_bio_PUBKEY(bio, &pkey, nullptr, nullptr) || pkey == nullptr)
{
error();
}

if (pkey)
{
EVP_PKEY_free(pkey);
}

if (bio)
BIO_free_all(bio);
Остановка моей DLL, выгрузка больше не происходит.
Я попробовал несколько вещей, например использование пользовательского контекста:

Код: Выделить всё

  OSSL_LIB_CTX* lib_ctx = OSSL_LIB_CTX_new();
if (!PEM_read_bio_PUBKEY_ex(bio, &pkey, nullptr, nullptr, lib_ctx, nullptr) || pkey == nullptr)
{
error();
}
...
OSSL_LIB_CTX_free(lib_ctx);
< /code>
также пробовал различные методы очистки: < /p>
EVP_cleanup();                // Clean up EVP layer (legacy compatibility)
CRYPTO_cleanup_all_ex_data(); // Clean up extra data
ERR_free_strings();           // Free error strings
SSL_COMP_free_compression_methods(); // Free compression methods (if SSL is used)
< /code>
Но ничего не помогает. < /p>
Я не знаю точно, как третья сторона делает остановку моего DLL, и у меня нет доступа к этому Code. 
ssl, который я использую: os: openssl 3.2.1 30 января 2024 
i СТИТИЧЕСКАЯ ССЫЛКА С libcrypto.lib 
и libssl.lib библиотеки.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ad-win-dll
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»