'OpenProcess'에 해당되는 글 1건
- 2007/03/16 C++ 에서 메모리 읽어오기~ (Process Memory)
프로세스에서 메모리 읽어오는 방식 (C++)
1. 프로세스를 얻어오는 방법
우선.. 윈도우의 핸들러를 얻어온다. 그리고 나서 이 핸들러를 이용하여
해당 윈도우의 프로세스 Pid를 읽어오면 되겠습니다~
그 후에 해당 프로세스를 열어줍니다. 프로그래밍에서 Open ~ Close 는 항상 기본입니다.
그리고 읽어온 프로세스 아이디를 이용해여 메모리를 읽어오면 끝~ 간단하죠?
그럼 어떻게 하는지 알아보도록 하겠습니다.
2. 간략한 코딩
::GetWindowThreadProcessId(m_UpdateWnd, &dwProcessId);
m_ProcessId = dwProcessId;
여기서 m_UpdateWnd 는 현재 윈도우 핸들러이고 , GetWindowThreadProcessId() 함수를 통해서 dwProcessId 에 프로세스 아이디를 넣어주고 리턴합니다.
위 방식 말고 FindWindow() 라는 함수로 간단하게 프로세스 아이디를 가져올수도
있습니다~
그럼 이제 해당 프로세스를 열어야 하겠죠?
hProcess=::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
위 함수가 바로 프로세를 열어주는 함수입니다. 여기서 PROCESS_ALL_ACCESS 는
해당 프로세스의 접근 권한입니다. 상수로 정의되어 있습니다.
리턴값은 해당 프로세스의 핸들러를 리턴해 줍니다. 그럼 이 핸들러를 통해서 메모리를
읽을수 있는겁니다.
이제 메모리를 읽기만 하면 되겠죠?
::ReadProcessMemory(hProcess, (LPVOID)dwAddress1, &dwValue1, iReadByte , &dwBytes);
위 함수를 통해서 해당 번지에 메모리를 읽어옵니다. 프로세스 핸들러를 통해서 메모리
번지를 읽어옵니다.
hProcess : 프로세스 핸들러
dwAddress1 : 메모리 번지
dwValue1 : 읽어온 값
iReadByte : 읽어올 바이트 수
dwBytes : 실제 읽어온 바이트 수
dwValue1 에는 메모리에서 읽어온 값을 리턴하구요, iReadByte
에서는 메모리에서 읽어올 바이트를 지정해줍니다. dwBytes에는 실제 메모리에서 읽어온
바이트를 리턴해줍니다.
3. 프로세스 Close
이제 모든 작업이 끝나면 닫아주면 되겠습니다.
::CloseHandle(hProcess);
그럼 여기서 응용하면 간단한 프로세스 메모리 에디터를 만들수가 있습니다.
만들어보세요~ (저는 안만들어 봤습니다만.. -ㅅ-;) ㅋㅋ

이올린에 북마크하기
Prev
Rss Feed