我在播放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"本身?还是它仍然会游荡并继续消耗我在注入时分配的内存?
由于 约什
答案 0 :(得分:1)
基本上Dll会在主线程结束时自动从进程中分离,除非你把它发送到一个无限循环,所以是的,你做对了
您可以在MessageBox
事件中添加DLL_PROCESS_DETACH
,以查看是否被调用
答案 1 :(得分:1)
我假设您使用了CreateRemoteThread,其起始地址设置为LoadLibrary,并且您在注入的DLL的DllMain中启动了一个线程。
首先,在DllMain中DLL_PROCESS_ATTACH在全局变量中保存DLL的HMODULE。
其次,当您希望线程退出并卸载Dll时,将此HMODULE传递给FreeLibraryAndExitThread。
小心!你不能忘记“生活代码”,也就是说,没有回调地址传递给任何API,如果在卸载后回调被触发,那将立即崩溃(或更糟)。