정의
프로세스(Process)
일반적으로 CPU에 의해 처리되는 사용자 프로그램, 시스템 프로그램
즉, 실행중인 프로그램을 의미
기본적으로 프로세스당 최소 1개의 메인 스레드를 가지고 있다.
각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료 구조에 접근할 수 없다.
운영체제에서는 프로세스에 PID(Process ID)를 붙여서 관리한다.
프로세스는 각각 독립된 메모리 영역을 할당받는다.
프로그램(Program)과 프로세스(Process)의 차이점
1. 프로그램은 보조 기억장치에 존재하며, 실행되기를 기다리는 명령어와 정적 데이터의 묶음
2. 프로그램의 명령어와 정적 데이터가 메모리에 실행되면 프로세스가 된다.
3. 프로그램은 하나지만, 프로그램을 실행하는 프로세스는 여러 개가 생길 수도 있다.
스레드(Thread)
프로세스 내에서 실행되는 여러 흐름의 단위
프로세스의 특정한 수행 경로
한 프로세스에 존재하는 모든 스레드들은 프로세스의 상태를 공유한다.
하나의 프로세스에 여러 개의 스레드 생성이 가능하다(스레드들은 동시에 실행 가능).
모듈(Module)
프로그래밍에서는 "본체에 대한 독립적 하위 단위" 또는 "독립되어 있는 하나의 소프트웨어 또는 하드웨어 단위"를 지칭한다.
열거 방법
1. 프로세스
PSAPI(Process Status API)를 사용
[함수 원형]
BOOL EnumProcesses(
DWORD *lpidProcess,
DWORD cb,
LPDWORD lpcbNeeded
);
2. 스레드
Tool Help Library 사용
[Tool Help Library]
kernel32.dll에 포함된 프로세스/스레드/모듈 열거 관련 라이브러리
kernel32.dll에 포함되어 있기에 별도의 외부 파일 설치 없이 바로 사용할 수 있다.
[함수 원형]
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
BOOL WINAPI Thread32First(
HANDLE hSnapshot,
LPTHREADENTERY32 lpte
);
BOOL WINAPI Thread32Next(
HANDLE hSnapshot,
LPTHREADENTERY32 lpte
);
3. 모듈
PSAPI 사용
[함수 원형]
BOOL EnumProcessModules(
HANDLE hProcess,
HMODULE *lphModule,
DWORD cb,
LPDWORD lpcbNeeded
);
참조한 사이트들
https://docs.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-enumprocesses
https://docs.microsoft.com/en-us/windows/win32/psapi/enumerating-all-processes
http://www.jiniya.net/wp/archives/7676
https://docs.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-enumprocessmodules
https://docs.microsoft.com/en-us/windows/win32/psapi/enumerating-all-modules-for-a-process
https://blockdmask.tistory.com/22
https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%93%88_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)
http://www.terms.co.kr/module.htm
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
'IT' 카테고리의 다른 글
Hyper-V와 WinDbg를 이용연결해서 Windows kernel 디버깅하기 (0) | 2020.12.31 |
---|---|
디바이스 드라이버와 응용 프로그램 간의 통신 방법(feat.DeviceIoControl) (0) | 2020.11.01 |
CreateFile(), ReadFile(), WriteFile() (0) | 2020.10.02 |
가상 주소 공간 (VAS, Virtual Address Space) (0) | 2020.06.08 |
PE(Portable Executable) 구조 (0) | 2020.05.31 |