如何从目标进程卸载 DLL?
How to unload a DLL from a target Process?
我正在使用注射器,但是当我尝试取消注入/卸载目标进程时,它直接关闭,我不知道为什么会这样。
这是我如何将 DLL 注入/加载到目标进程中的代码。执行 ID是它的目标进程,它是 PID。最后,我正在等待LoadLibraryA函数的完成。
HANDLE proc;
HANDLE thread;
LPVOID remoteString, loadLib;
proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, executionId);
loadLib = (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
remoteString = (LPVOID)VirtualAllocEx(proc, NULL, strlen(library.c_str()), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(proc, (LPVOID)remoteString, library.c_str(), strlen(library.c_str()), NULL);
thread = CreateRemoteThread(proc, NULL, NULL, (LPTHREAD_START_ROUTINE)loadLib, (LPVOID)remoteString, NULL, NULL);
std::cout << "Finished" << std::endl;
WaitForSingleObject(thread, INFINITE);
VirtualFreeEx(proc, remoteString, strlen(library.c_str()) + 1, MEM_RELEASE);
CloseHandle(thread);
CloseHandle(proc);
现在我正在尝试在进程中取消注入/卸载 DLL。我在 DLL 中执行此操作:
FreeLibrary(hModule, 0);
此代码正在关闭我的目标进程,其中 DLL 是。 有什么想法或解决方案吗?
它崩溃了,因为在 FreeLibrary 调用(返回到 Windows 线程起始代码的结语代码(之后仍有代码要运行,但该代码在 FreeLibrary 调用后消失了。
使用 FreeLibraryAndExitThread 而不是 FreeLibrary,你应该很好。
相关文章:
- 无法使用加载库卸载注入的 dll (C++)
- std::thread 增加 DLL 引用计数,从而防止卸载 DLL
- 为什么有些延迟加载 DLL 会立即使用 FFMPEG 卸载?
- 如何根据 DLL 端的请求卸载 DLL 模块以卸载它?
- 如何从目标进程卸载 DLL?
- 如何正确卸载DLL本身
- MFC-在dll卸载时,扫描我的代码,任何剩余的计时器,事件,线程等
- ProcessExit- dll卸载和静态的顺序
- 虽然我只做过一次LoadLibrary,但我必须做两次FreeLibrary.此外,在卸载DLL后,当试图再次加载它时,
- 使用boost::signals2并卸载DLL时发生访问冲突
- 线程对象的 WaitForSingleObject 在 DLL 卸载中不起作用
- 在卸载 DLL 期间删除静态对象时退出线程会导致死锁
- 无法从 C# 运行 C++ clr dll - Dll 已卸载?
- C++ DLL 卸载析构函数
- 卸载DLL后,我可以存储在DLL中创建的对象吗
- 在释放静态内存之前已完成卸载DLL
- 从MFC程序卸载dll文件
- 当使用pinvoke从c#代码调用时,非托管c++dll何时从内存卸载
- Windows 7 64位,Qt 4:glGetVersion 返回 "1.1.0",nvogl32v.dll 被卸载
- 可视化如何卸载托管c++ dll?