【问题标题】:Injected DLL Main loop crashes the process注入的 DLL 主循环使进程崩溃
【发布时间】:2016-08-02 04:23:04
【问题描述】:

我目前正在尝试将 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 注入?
  • "我目前正在尝试将 DLL 注入到项目中" 我成功地将 dll 注入进程,我尝试使用 dllmain 上的消息框进行测试,它出现了,但每次我尝试使用 while 循环它崩溃。
  • 您是使用Detours 还是手动分配和注入进程空间?您是否确保您的页面是可执行的?
  • 我是手动完成的,但我真的不明白为什么循环会导致进程崩溃,它几乎可以与其他所有内容一起使用
  • 您之前说过“进程崩溃”。现在你已经说过它“只是卡住了,没有响应”。这些不是一回事。当某些东西崩溃时,这意味着它遇到错误并终止。它有时会在终止之前显示错误消息。当程序停止响应时,这称为hanging。那么,它是什么:你的程序是崩溃还是挂起?

标签: c++ c winapi dll


【解决方案1】:

既然你改变了你原来的问题,我会重新安排一下我的答案......

您可以在 DLL 入口点安全地执行的操作有很大的限制。

请仔细阅读以下页面上的重制版: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspxhttps://msdn.microsoft.com/en-us/library/windows/desktop/aa370448(v=vs.85).aspx

例如,在 DLL_PROCESS_ATTACH 期间花费的时间不应超过 300 毫秒(推荐时间)。你也没有返回任何东西(应该是布尔值)。

但是,我认为您的软件挂起的主要原因是因为MessageBox 和/或getch() 可能会在那里造成死锁。关于MessageBox 改用OutputDebugString,请参考这个答案:https://stackoverflow.com/a/10981735/5874704

也如 cmets 中所建议:

不要将 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;

}

【讨论】:

  • 仍然无法让 while 循环工作,注入时不断使进程崩溃。
  • 不要将 while 循环放在 DllMain 中。使用 DllMain 中的 CreateThread 启动一个新线程。把while循环放在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
相关资源
最近更新 更多