LPVOID pFunc = LoadLibraryA;
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID ); 每次到这一步的时候线程能够直接创建。但是dll就是插不进去,
dll路径我也换成完整的了。直接在程序里面写loadlibrary(dllname) dllmain函数也可以正常执行。
HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID ); 每次到这一步的时候线程能够直接创建。但是dll就是插不进去,
dll路径我也换成完整的了。直接在程序里面写loadlibrary(dllname) dllmain函数也可以正常执行。
WriteProcessMemory(hProcess,pvRemoteMem,(void*)pcLibraryName,strlen(pcLibraryName)+1,&dwBytesWritten) LPVOID pFunc = LoadLibraryA;
hRemoteThread=CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pFunc,pvRemoteMem,0,&dwRemoteThreadId);
http://blog.csdn.net/hua1998/archive/2006/10/10/1328651.aspx
居然是我分配的空间太小了,加上sizeof(wchar) * lstrlen(pcLibraryName)+1就 ok了,非常感谢2楼的兄弟另外谁解释一下
lstrlen是宽字节的
loadlibrary 在目标进程中也会有吧,昨天调试已经通过了dll已经加载到计算机的进程中了,用 360测试进程模块可以看到我加载的dll
LPTHREAD_START_ROUTINE pfnStartRoutine = (LPTHREAD_START_ROUTINE)::GetProcAddress(hModule, "LoadLibraryW");
// 创建远程线程执行代码
DWORD dwThreadID = 0;
HANDLE hThread = ::CreateRemoteThread ( hProcess, NULL, 0,pfnStartRoutine, pDataRemote, 0,&dwThreadID );
if ( HANDLE_IS_VALID(hThread) )
{
// 等待远程线程结束
::WaitForSingleObject ( hThread, INFINITE );
DWORD dwRetCode = 0;
::GetExitCodeThread ( hThread, &dwRetCode );
TRACE ("run and return %d\n", dwRetCode );
}
在DllMain处设置断点咋走不到呢,DllMain中还整了个While(1)呢并且创建完线程后::WaitForSingleObject ( hThread, INFINITE );立刻返回了。没有等待啊?
执行了WaitForSingleObject 是不是代表线程被创建成功了,只不过由于其他原因没有载入Dll呢?