자~ 오늘은 무신이야기를 계속할까요~
그야… CreateRemteThread()라는 녀석에 대해서 더 이야기 해야겠죠…
칼을 꺼냈으니…
무우라도 잘라요죠…
그렇죠^^~!
무우를 주세요~!
대걸레를 들고..뭐하는 것일까?
정말 무우를 자르려고 하는가 보군요~!!
자…
이 전 이야기에서 저는 다른 프로세스에 스레드를 만드는 방법에 대해서
이야기를 시작했었요~~
기억 나시나요~
프로세스들은 모두다 독립된 메모리공간을 가지고 있기 때문에.
다른 프로세스의 메모리에 뭔가를 한다는 것이 이상한 것입니다.
하지만, 권한만 있다면, 이게 다 가능하다죠~~!!
ㅋ~
그게 다 ...OpenProcess()함수가 있기 때문에 가능한거죠~!
그렇죠?
HANDLE hTargetProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
기억 나시죠^^?
PID (Process ID)만 알고 있으면, 해당 프로세스의 핸들을 알아내고, 그 핸들을 이용하여 메모리를 할당 할 수 있는 것입니다.
VirtualAllocEx()함수를 이용해서 말이죠~!!
//1. OpenProcess로 프로세스를 오픈한다. HANDLE hTargetProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID); //2. 오픈된 프로세스에 가상메모리를 할당한다. void* pRemoteThread = VirtualAllocEx(hTargetProcess, 0, dwThreadSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); |
자~ Now~
VirtualAllocEx()함수를 이용하여 할당한 메모리에 이번에는 WriteProcessMemory()함수를 이용하여 스레드 함수를 복사해 봅시다.
//3. 새로 추가한 메모리에 스레드 함수를 복사한다. WriteProcessMemory( hTargetProcess, pRemoteThread, &threadProc, dwThreadSize, 0); |
새로 할당한 메모리 pRemoteThread에, 스레드 함수 threadProc()을 복사하는 것입니다.~
알겠죠~
dwThreadSize 만큼요~!
알겠죠~!
그런데, 요 시점에서~~
스레드함수를 알아봐야 겠죠~!
스레드 함수...라는 것은 뭐냐?
스레드를 만들때 사용되는 함수입니다.
뭐시기? 스레드를 만든때 사용하는 함수?
그냥 아무것나 사용하면 안되는 것여^^?
그렇습니다. 스레드를 만들 때는 무조건…
다음 형태의 함수이어야 합니다.
잘보세요~~!
DWORD WINAPI ThreadProc( |
그렇습니다. 인자는 한개의 LPVOID 형 ...리턴값은..DWORD …
함수 호출 방식은 WINAPI 즉~ __stdcall 방식이고요~~
#define WINAPI __stdcall
입니다.
흐….오늘도 멀리 가지 못했군요…
흐~~내일 다시 봅시다.
물방울로 바위를 뚤을것입니다.
흐~~