注入的DLL主循环使进程崩溃

Injected DLL Main loop crashes the process

本文关键字:进程 崩溃 循环 DLL 注入      更新时间:2023-10-16

我目前正试图将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;
}