出现的问题
我在进行一次远程注的时候,通过CreateRemoteThread,调用有参函数,之前一直使用的是debug 模式,一直效果上看调用成功了,但是,程序会被强制退出。
代码片段
PID = GetPid(L"植物大战僵尸中文版");
HANDLE hpro;
hpro = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
_putPlant pp;
pp.U_ID = 20;
pp.U_X = 0;
pp.U_Y = 2;
//申请空间
ThreadAdd = VirtualAllocEx(hpro, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
//写入函数
WriteProcessMemory(hpro, ThreadAdd, PuthLants, 4096, NULL);
//参数申请空间
//装载函数需要的参数空间
ParamAdd = VirtualAllocEx(hpro, NULL, sizeof(_putPlant), MEM_COMMIT, PAGE_READWRITE);
//写入函数参数
WriteProcessMemory(hpro, ParamAdd,&pp, sizeof(_putPlant), NULL);
//创建远程线程
hThread = CreateRemoteThread(hpro, NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadAdd, ParamAdd, NULL, NULL);
//等待线程结束 释放资源
WaitForSingleObject(hThread, 5000);
//释放目标资源
VirtualFreeEx(hpro, ThreadAdd, 0, MEM_RELEASE);
VirtualFreeEx(hpro, ParamAdd, 0, MEM_RELEASE);
CloseHandle(hpro);
解决办法
我们只需要将debug模式,换成release 模式就行了,debug 会产生对于的堆栈代码,会让程序报错强制退出。