下面是.dll里面的内容
DWORD WINAPI ShowMainDlg(LPVOID pParam)
{
::MessageBoxA(NULL,"模块加载成功","11",0);
AssisMainDlg dlg;
dlg.DoModal();
return 0;
}
BOOL CAssistModelApp::InitInstance()
{
CWinApp::InitInstance();
::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ShowMainDlg, NULL, NULL,NULL);
return TRUE;
}
int CAssistModelApp::ExitInstance()
{
::MessageBox(NULL, TEXT("模块卸载成功"), TEXT("22"), 0);
return CWinApp::ExitInstance();
}
下面是加载程序,bo为false时,如果.dll里面没有AssisMainDlg dlg; dlg.DoModal();可以正常卸载dll,如果加上了这个界面,卸载时显示卸载成功,但是会导致被加载程序崩溃
void CInjectTestDlg::InjectAssist(DWORD pid,CString dllPath,bool bo)
{
HANDLE hprocess = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
LPVOID lpBaseAddress = VirtualAllocEx(hprocess, NULL, strlen(dllPath)+1, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hprocess, lpBaseAddress, dllPath, strlen(dllPath) + 1, NULL);
HMODULE hmodue = GetModuleHandle("Kernel32.dll");
if (bo)
{
LPTHREAD_START_ROUTINE lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(hmodue, "LoadLibraryA");
HANDLE hThread = CreateRemoteThread(hprocess, NULL, 0, lpStartAddress, lpBaseAddress, NULL, 0);
WaitForSingleObject(hprocess, 2000);
CloseHandle(hprocess);
CloseHandle(hThread);
}
else
{
LPTHREAD_START_ROUTINE lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(hmodue, "GetModuleHandleA");
HANDLE hThread = CreateRemoteThread(hprocess, NULL, 0, lpStartAddress, lpBaseAddress, NULL, 0);
WaitForSingleObject(hThread, INFINITE);
DWORD dwRet = 0;
GetExitCodeThread(hThread, &dwRet);
//CloseHandle(hprocess);
//CloseHandle(hThread);
lpStartAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(hmodue, "FreeLibraryAndExitThread");
hThread = CreateRemoteThread(hprocess, NULL, 0, lpStartAddress, (LPVOID)dwRet, NULL, 0);
WaitForSingleObject(hprocess, 2000);
CloseHandle(hprocess);
CloseHandle(hThread);
}
}
据我所知,程序的运行本就以来dll,现在你把dll卸载了,崩溃应该是自然而然的事吧?
我猜测,应该是你的dll里面有某些方法,或者是变量是主程序所依赖的,卸载后主程序没有找到相应函数或者变量,导致崩溃。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632