Sli*_*ght 5 c++ dll visual-studio-2010 dll-injection
我已经构建了一个DLL,它通常通过SetWindowHookEx注入到控制台应用程序中.它很重要的DLL将信息输出到控制台,我一直在使用std :: cout.DLL已接近完成,直到我尝试在发布模式下构建DLL,这使得所有cout行无效.我已经验证了DLL正在注入并且正在执行一个简单的空取消引用,导致程序在dllmain函数中崩溃.与std :: printf相同的故事.
void onAttach()
{
//WARNING THIS IS A DEMONSTRATION
std::cout<<"test"<<std::endl;
//int* intPtr = 0;
//*intPtr = 3; //This causes a crash
}
// entry point
BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls ( hModule );
CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) onAttach, NULL, 0, NULL );
return true;
break;
case DLL_PROCESS_DETACH:
return true;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道如何处理这个问题.Release链接器是否以某种方式排除了依赖关系?
我正在使用MSVS 2010和默认的发布/调试配置设置.调试dll大约是5,137kb,发布dll只有23kb.
您不应该在 DllMain 中执行任何依赖于另一个 DLL 的操作。您至少违反了三次:printf并且std::cout依赖于 CRT(而 CRT 又依赖于 Win32 DLL)以及CreateThread依赖于 Kernel32.DLL。
DllMain用于简单的事情,例如将变量归零等。