Сначала я попробовал использовать следующую строку в моем файле .cpp:
Код: Выделить всё
#pragma comment(linker, "/export:function_name=lib.function_name")
Код: Выделить всё
g++
Вот текущая настройка:
wintrustprox.def:
Код: Выделить всё
EXPORTS
WinVerifyTrust @1
AddPersonalTrustDBPages=wintrust.AddPersonalTrustDBPages @2
CatalogCompactHashDatabase=wintrust.CatalogCompactHashDatabase @3
ComputeFirstPageHash=wintrust.ComputeFirstPageHash @4
;rest of the wintrust.dll functions...
Код: Выделить всё
#include
// Define Success as 0
#define WINVERIFYTRUST_SUCCESS 0
// Define the function signature based on the original WinVerifyTrust
extern "C" __declspec(dllexport) LONG WinVerifyTrust(
HWND hwnd,
GUID *pgActionID,
LPVOID pWVTData
) {
// Return Success enum value
return WINVERIFYTRUST_SUCCESS;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Код: Выделить всё
g++ wintrustprox.cpp wintrustprox.def -o wintrustprox.dll -shared
- Почему #pragma comment(linker) не работает с g++?
Я видел, как он используется с MSVC, но когда я пробую его с g++ , похоже, он игнорируется без каких-либо ошибок или предупреждений. - Как скомпилировать 32-битную версию этой DLL?
Мне нужно убедиться, что 32-битная DLL:- Использует wintrust .dll из папки syswow64, а не system32.
- Работает в 32-битных системах. . Какой дополнительный код или инструменты мне нужно скомпилировать для 32-разрядной версии?
- Как я могу проверить, что DLL действительно правильно проксирует функции в 32- и 64-битных системах?
Помимо простой проверки существования функций, как я могу подтвердить, что вызовы перенаправляются на исходный файл wintrust.dll (кроме WinVerifyTrust, который я переопределяю)?
Подробнее здесь: https://stackoverflow.com/questions/791 ... bit-64-bit