#include #include // Function pointer typedef for the DLL function typedef void* (*DLL_FUNC_T1)(); typedef void* (*DLL_FUNC_CTX_NEW)(DLL_FUNC_T1); typedef void* (*DLL_FUNC_CTX_FREE)(DLL_FUNC_T1); typedef void* (*DLL_FUNC_SSL_NEW)(void*); typedef void* (*DLL_FUNC_SSL_FREE)(void*); typedef char* (*DLL_FUNC_SSL_STRING)(void*); typedef int (*DLL_FUNC_SSL_WANT)(void*); int main() { // Load the DLL HINSTANCE hinstLib = LoadLibrary(TEXT("libssl-3-x64.dll")); if (hinstLib == NULL) { printf("Failed to load DLL\n"); return 1; } // Get a pointer to the DLL function DLL_FUNC_T1 fnT1 = (DLL_FUNC_T1)GetProcAddress(hinstLib, "TLSv1_client_method"); if (fnT1 == NULL) { printf("Failed to get function from DLL\n"); return 1; } DLL_FUNC_CTX_NEW fnCTXNew = (DLL_FUNC_CTX_NEW)GetProcAddress(hinstLib, "SSL_CTX_new"); if (fnCTXNew == NULL) { printf("Failed to get function from DLL\n"); return 2; } // DLL_FUNC_CTX_FREE fnCTXFree = (DLL_FUNC_CTX_FREE)GetProcAddress(hinstLib, "SSL_CTX_free"); // if (fnCTXFree == NULL) { printf("Failed to get function from DLL\n"); return 3; } DLL_FUNC_SSL_NEW fnSSLNew = (DLL_FUNC_SSL_NEW)GetProcAddress(hinstLib, "SSL_new"); if (fnSSLNew == NULL) { printf("Failed to get function from DLL\n"); return 4; } // DLL_FUNC_SSL_FREE fnSSLFree = (DLL_FUNC_SSL_FREE)GetProcAddress(hinstLib, "SSL_free"); // if (fnSSLFree == NULL) { printf("Failed to get function from DLL\n"); return 5; } DLL_FUNC_SSL_STRING fnSSLString = (DLL_FUNC_SSL_STRING)GetProcAddress(hinstLib, "SSL_rstate_string_long"); if (fnSSLString == NULL) { printf("Failed to get function from DLL\n"); return 6; } DLL_FUNC_SSL_WANT fnSSLWant = (DLL_FUNC_SSL_WANT)GetProcAddress(hinstLib, "SSL_want"); if (fnSSLWant == NULL) { printf("Failed to get function from DLL\n"); return 6; } printf("ssl state 1\n"); void *method = fnT1(); printf("ssl state 1.1\n"); void *ptr1 = fnCTXNew(method); printf("ssl state 2\n"); void *ptr2 = fnSSLNew(ptr1); printf("ssl state 3\n"); void *ctx = printf("ssl state %s\n", fnSSLString(ptr2)); printf("ssl state %d\n", fnSSLWant(ptr2)); //SSL_CTX_new &SSL_CTX_free // Call the DLL function // int result = dllFunc(42); // printf("DLL function returned: %d\n", result); // Free the DLL FreeLibrary(hinstLib); return 0; }