gpt4 book ai didi

c++ - 注入(inject)的 DLL 主循环导致进程崩溃

转载 作者:行者123 更新时间:2023-11-30 20:12:15 25 4
gpt4 key购买 nike

我目前正在尝试将 DLL 注入(inject)到项目中,但每次我使用 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).aspxhttps://msdn.microsoft.com/en-us/library/windows/desktop/aa370448(v=vs.85).aspx

例如,DLL_PROCESS_ATTACH 期间的时间不应超过 300 毫秒(建议时间)。您也没有返回任何内容(应该是 bool 值)。

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

也按照评论中的建议:

Don't put the while loop in DllMain. Use CreateThread in DllMain to launch a new thread. Put the while loop there

之前您也询问过 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;

}

关于c++ - 注入(inject)的 DLL 主循环导致进程崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36558309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com