进程插入的线程不停执行问题
dll程序如下:
#include <windows.h>
#include <string>
extern "C " __declspec(dllexport) __stdcall int DllSum(int a, int b)
{
for (int nL = 0; nL < 3; nL++)
{
char str[256];
sprintf(str, "dir > c:\\%d.txt ", nL);
system(str);
}
}
BOOL WINAPI DllMain( HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
DllSum(1,2);
return TRUE;
}
注入进程的代码:
const DWORD THREADSIZE=1024*4;
HANDLE pRemoteThread,hRemoteProcess;
PTHREAD_START_ROUTINE pfnAddr,lpfnDllFunc1;
DWORD pId = 0;
void *pFileRemote;
HWND hWinPro1=::FindWindow(NULL, "a.txt - ¼Çʱ¾ ");
if(!hWinPro1)
{
MessageBox( "Not have exp! ");
}
else
{
::GetWindowThreadProcessId(hWinPro1, &pId); //»ñµÃexplorer¾ä±ú
hRemoteProcess=::OpenProcess(PROCESS_ALL_ACCESS, false, pId);
pFileRemote=::VirtualAllocEx(hRemoteProcess, 0, THREADSIZE, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if(!::WriteProcessMemory(hRemoteProcess,pFileRemote, "c:\\a.dll ", THREADSIZE, NULL))
{
return;
}
pfnAddr=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT( "Kernel32 ")), "LoadLibraryA ");
HINSTANCE hDll;
hDll = LoadLibrary( "c:\\a.dll ");
pRemoteThread=::CreateRemoteThread(hRemoteProcess,NULL,0,pfnAddr,pFileRemote,0,NULL);
DWORD tt = GetLastError();
if(pRemoteThread==NULL)
{
return;
}
else MessageBox( "success! ");
}
问题是我现在执行程序的时候,只要记事本不关闭,就不停执行线程的内容。
还有我用vc6的process viewer怎么看不到我的记事本进程里没有我的线程呢?
[解决办法]
新键一个DLL工程(不是MFC DLL),dllmain里的东西如下:
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//add your code here!
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;