|
안녕하세요
다른 프로세스의 메모리 읽어 오는 부분과 쓰레드는 별 상관이 없습니다.
쓰레드는 원래 CPU 스케쥴링의 문제이니깐요..
Snapshot 은 말 그대로 현재 내 컴퓨터에서 돌아가는 쓰레드, 프로세스, 메모리 영역의
스냅샷을 찍는것을 말합니다.
즉, 현재 돌아가고 있는 프로세스들과 그 프로세스에서 사용하는 쓰레드들, 불러들인
모듈의 어드레스 등등을 모두 담고 있는것이죠.
CreateToolhelp32Snapshot 라는 펑션을 참조해 보세요
그 스냅샷을 만들어주는 펑션입니다.
그리고 프로그램의 전체 흐름은 틀리지 않습니다.
: 1. 캡션으로 해당 pg 핸들을 찾는다
: HWND handle = FindWindow(0,"계산기");
: 2. 해당 pg의 프로세스 ID를 얻는다.
: GetWindowThreadProcessId(handle, &processID );
: 3. 프로세스 오픈
: processHandle = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID);
프로세스의 사이즈를 파악한다기보다.
현재 OS 에서 어플리케이션이 사용할수 있는(사용자가 직접 손댈수 있는) 메모리 영역의
최소값과 최대값을 가져오고 있는것이죠
: 4. pg 싸이즈를 파악한다.
: GetSystemInfo(&sysInfo);
: baddr = sysInfo.lpMinimumApplicationAddress;
: memset(&mbi,0,sizeof(MEMORY_BASIC_INFORMATION));
: VirtualQueryEx(processHandle,badd....)
: memoryStart=sysInfo.lpMinimumApplicationAddress ;
: memorySize=sysInfo.lpMaximumApplicationAddress ;
: 5. for문으로 해당 pg에서 원하는 부분을 찾는다.
: ReadProcessMemory(processHandle,(void *)i,(LPVOID)&v,4,&size);
: 6. close 핸들
그럼 좋은 하루 되세요..
|