注入的DLL主循环使进程崩溃
Injected DLL Main loop crashes the process
我目前正试图将DLL注入项目中,但每次使用while循环时,进程都会崩溃。这是代码:
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call,LPVOID lpReserved ){
switch(ul_reason_for_call){
case DLL_PROCESS_ATTACH:
while(char c = getch()){
if(c == 'p'){
MessageBox(0,L"CAPT",L"CAPT",MB_OK);
}
}
break;
}
return TRUE;
}
既然你改变了原来的问题,我会重新安排一下我的答案。。。
在DLL入口点中可以安全地执行的操作有很大的限制。
请仔细阅读下页的重制版:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx和https://msdn.microsoft.com/en-us/library/windows/desktop/aa370448(v=vs.85).aspx
例如,在DLL_PROCESS_ATTACH过程中所花费的时间不应超过300ms(建议时间)。您也没有返回任何内容(应该是布尔值)。
然而,我认为您的软件挂起的主要原因是MessageBox
和/或getch()
可能会在那里创建死锁。关于MessageBox
,请改用OutputDebugString
,请参阅以下答案:https://stackoverflow.com/a/10981735/5874704
也如评论中所建议的:
不要将while循环放在DllMain中。在DllMain中使用CreateThread来启动新线程。把while循环放在那里
之前您还询问了DLLMain的定义。这是DllMain:的"裸"功能
BOOL WINAPI DllMain(
HINSTANCE hDllHandle,
DWORD nReason,
LPVOID Reserved)
{
BOOL bSuccess = TRUE;
switch ( nReason )
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return bSuccess;
}
相关文章:
- 无法删除EXE崩溃后,即使进程未显示在任务管理器中
- 操作系统如何检测进程崩溃
- 在C++/Win32中检测到进程崩溃
- 如果子进程关闭或崩溃,则关闭父进程
- 为什么 SIGSEGV 不会使进程崩溃?
- 多次使用SetWindowsHookEx取消挂接挂接集会导致挂接进程崩溃
- 如何检测终止进程事件、计算机关闭和计算机崩溃
- 如果儿童进程崩溃,则QPROCESS ::已完成
- Unix域套接字(C++)-客户端使服务器守护进程崩溃
- DBUS 代码在放置在守护进程内时崩溃,但在没有守护进程代码的独立独立 main() 函数中运行良好
- 如果在进程崩溃后在进程中分配内存,会发生什么情况
- 注入的DLL主循环使进程崩溃
- 如何检测Poco子进程何时崩溃
- 创建远程线程会使进程崩溃
- Informix 错误后进程崩溃
- 有没有办法在考虑到崩溃的情况下同步进程
- 当一个进程崩溃时,我怎么能压制所有的错误对话框(我只想让它安静地崩溃)
- 如果进程崩溃,映射文件会发生什么
- 在Eclipse中查看变量时,gdb进程崩溃
- 使用C++检测进程崩溃的最佳方法是什么