如何正确处理注入的DLL线程?

时间:2013-11-12 16:02:57

标签: c++ memory-management dll inject code-injection

我在播放MMORPG时将DLL注入目标进程以充当帮助者(当前功能将按键转换为鼠标点击,因为MMORPG要求用户移动鼠标以获得某些功能,我是轻视。)

我们想说无论出于何种原因我想要取消注册我的DLL,我该怎么做呢?这种方法干净吗?

bool running = true;
while (running) // This is the only thread I'm using, and it is running in "realtime"
{
    // Do keyboard handing stuff in switch statement
    case keys.EscapeKey: // If the escape key is pressed
        running = false; // Set the running bool to false, and break the loop
        break;
}

这个干净吗?线程结束,我的dll" uninject"本身?还是它仍然会游荡并继续消耗我在注入时分配的内存?

由于 约什

2 个答案:

答案 0 :(得分:1)

基本上Dll会在主线程结束时自动从进程中分离,除非你把它发送到一个无限循环,所以是的,你做对了

您可以在MessageBox事件中添加DLL_PROCESS_DETACH,以查看是否被调用

答案 1 :(得分:1)

我假设您使用了CreateRemoteThread,其起始地址设置为LoadLibrary,并且您在注入的DLL的DllMain中启动了一个线程。

首先,在DllMain中DLL_PROCESS_ATTACH在全局变量中保存DLL的HMODULE。

其次,当您希望线程退出并卸载Dll时,将此HMODULE传递给FreeLibraryAndExitThread。

小心!你不能忘记“生活代码”,也就是说,没有回调地址传递给任何API,如果在卸载后回调被触发,那将立即崩溃(或更糟)。