SlideShare a Scribd company logo
릭터

제프리 리처의

WINDOWS VIA C/C++
4장 프로세스

ohyecloudy
http://cafe.naver.com/architect1 아꿈사
http://ohyecloudy.com

2012.01.14
프로세스process, 스레드thread에 대해
간단히 브리핑하고

프로세스 특징에 대해 알아보자. 고고~
수행중인 프로그램 인스턴스
프로세스
커널 오브젝트

주소 공간

프로세스

프로세스 관리 목적으로
OS가 사용
프로세스 통계 정보를
시스템이 커널 오브젝트에 저장
커널 오브젝트
실행 모듈이나 DLL 코드, 데이터를 수용

주소 공간

프로세스

동적 메모리 할당에 사용되는 공간 포함
- 스레드 스택, 힙 할당
코드를 수행할 책임
스레드 thread
6장~9장 참고

프로세스 주소 공간 내에서 동시에 코드를 수행
스레드마다 CPU 레지스터 집합, 스택을 가져야 함
주 스레드primary thread
프로세스가 생성되면 자동으로 생성
첫 번째 스레드
첫 번째 윈도우 애플리케이션 작성
CreateProcess 함수
프로세스 종료
차일드 프로세스 (p160~p163)
관리자가 표준 사용자로 수행되는 경우
윈도우는 CUI, GUI 기반 애플리케이션 지원.
서브 시스템으로 구분

윈도우는 어떻게 서브 시스템을 구분하는가?
write

linker
/SUBSYSTEM : CONSOLE
/SUBSYSTEM : WINDOWS

header

실행파일
write

linker
/SUBSYSTEM : CONSOLE
/SUBSYSTEM : WINDOWS

header

OS loader

실행파일

서브시스템에 맞게 로드
윈도우 어플리케이션은 수행 시작위치를 가진다
진입점 함수entry-point function
_tWinMain(), _tmain()

작성한 진입점 함수는 어떻게 호출되는가?
OS

작성한
진입점 함수
예) wWinMain

CRT 시작 함수
예) wWinMainCRTStartup
CRT(c run-time libraries) 시작 함수가 하는 일?
새로운 프로세스 명령행 포인터 획득
새로운 프로세스 환경변수 포인터 획득
CRT 전역 변수 초기화
CRT 메모리 할당 함수 초기화
저수준 입출력 루틴 사용하는 힙 초기화
전역, static 클래스 오브젝트 생성자 호출
CRT exit()

작성한
진입점 함수
예) wWinMain

반환 값

CRT 시작 함수
예) wWinMainCRTStartup
CRT exit() 하는 일?
_onexit()로 등록했던 함수 호출
전역, static 클래스 오브젝트 소멸자 호출
_CrtDumpMemoryLeaks() 메모리 누수 보고
진입점 함수 반환 값을 인자로 ExitProcess() 호출
고유의 인스턴스 핸들을 할당받는다
모든 실행파일과 DLL 파일
프로세스 메모리 공간 상에 로드될 때
방금 말한 그 핸들
int WINAPI _tWinMain(
HINSTANCE hInstanceExe,
HINSTANCE hPrevInstance,
PSTR pszCmdLine,
int nCmdShow);

GetModulehandle()
로도 알 수 있다.
보통 리소스를 로드할 때 사용
HICON LoadIcon(
HINSTANCE hInstance,
PCTSTR pszIcon);
실행 파일이 로드될 시작 주소
링커가 결정

0x00400000
visual studio linker 기본 시작 주소
윈도 98에서 실행 파일을 로드할 수 있는 최하단
역사적인 이유

/BASE:[address]로 변경 가능
엥? 그럼 프로세스 시작 주소가 다 겹치지 않나?

가상 주소 공간을 가지기 때문에 문제 X
13장 기대하세요
패스 (p121~p136)
프로세스 명령행
프로세스 환경변수
프로세스 선호도
프로세스 에러 모드
프로세스 현재 드라이브와 디렉토리
시스템 버전
첫 번째 윈도우 애플리케이션 작성
CreateProcess 함수
프로세스 종료
차일드 프로세스 (p160~p163)
관리자가 표준 사용자로 수행되는 경우
CreateProcess()를 호출하면?
프로세스 커널 오브젝트 생성 (사용 카운트 1)
가상 주소 공간을 생성
코드와 데이터, DLL파일을 로드
주 스레드를 위한 스레드 커널 오브젝트 생성
CRT 시작 코드 실행
프로세스를 생성할
실행 파일
BOOL CreateProcess(
PCTSTR pszApplicationName,
PTSTR pszCommandLine,
PSECURITY_ATTRIBUTES psaProcess,
PSECURITY_ATTRIBUTES psaThread,
BOOL bInheritHandles,
DWORD fdwCreate,
PVOID pvEnvironment,
PCTSTR pszCurDir,
PSTARTUPINFO psiStartInfo,
PPROCESS_INFORMATION ppiProcInfo);

전달할 명령행 문자열

p138~p140
BOOL CreateProcess(
PCTSTR pszApplicationName,
PTSTR pszCommandLine,
PSECURITY_ATTRIBUTES psaProcess,
PSECURITY_ATTRIBUTES psaThread,
BOOL bInheritHandles,
DWORD fdwCreate,
PVOID pvEnvironment,
PCTSTR pszCurDir,
PSTARTUPINFO psiStartInfo,
PPROCESS_INFORMATION ppiProcInfo);

프로세스 커널 오브젝트
보안 특성

스레드 커널 오브젝트
보안 특성
상속 가능한 핸들을
생성할 것인가?

p140~p142
BOOL CreateProcess(
PCTSTR pszApplicationName,
PTSTR pszCommandLine,
PSECURITY_ATTRIBUTES psaProcess,
PSECURITY_ATTRIBUTES psaThread,
BOOL bInheritHandles,
DWORD fdwCreate,
PVOID pvEnvironment,
PCTSTR pszCurDir,
PSTARTUPINFO psiStartInfo,
PPROCESS_INFORMATION ppiProcInfo);

새로운 프로세스를
어떻게 생성할지
환경변수 문자열
메모리 블록 포인터
현재 디렉토리 설정

p142~p145
BOOL CreateProcess(
PCTSTR pszApplicationName,
PTSTR pszCommandLine,
PSECURITY_ATTRIBUTES psaProcess,
PSECURITY_ATTRIBUTES psaThread,
BOOL bInheritHandles,
STARTINFO나 STARTINFOEX
DWORD fdwCreate,
구조체 포인터
PVOID pvEnvironment,
어플리케이션 윈도 크기, 위치,…
PCTSTR pszCurDir,
PSTARTUPINFO psiStartInfo,
PPROCESS_INFORMATION ppiProcInfo);

p145~p152
BOOL CreateProcess(
PCTSTR pszApplicationName,
PTSTR pszCommandLine,
PSECURITY_ATTRIBUTES psaProcess,
PSECURITY_ATTRIBUTES psaThread,
BOOL bInheritHandles,
CreateProcess()가 채워줌
DWORD fdwCreate,
프로세스 핸들, 주 스레드 핸들…
PVOID pvEnvironment,
PCTSTR pszCurDir,
PSTARTUPINFO psiStartInfo,
PPROCESS_INFORMATION ppiProcInfo);

p145~p152
프로세스, 스레드 ID 특징
시스템 전체에 걸쳐 unique
ID pool 공유
프로세스 ID랑 스레드 ID
같은 ID를 가지는 프로세스, 스레드는 존재 안함
ID는 0이 될 수 없다.
system idle process는 가상 프로세스 (PID 0)
# of CPU만큼 스레드를 가지고 있다.
프로세스 ID는 재사용
종료하면 새로운 프로세스에 ID 할당

프로세스간 통신이 필요하면
PID 대신
영속적인 커널 오브젝트, 윈도우 핸들 등을 사용
첫 번째 윈도우 애플리케이션 작성
CreateProcess 함수
프로세스 종료
차일드 프로세스 (p160~p163)
관리자가 표준 사용자로 수행되는 경우
1/4
주 스레드의 진입점 함수가 반환된다.
유일하게 리소스가 적절히 해제되는 걸 보장
생성된 c++ 오브젝트 소멸자 호출
스레드 스택으로 할당된 메모리 해제
프로세스 종료 코드 설정
진입점 함수 반환 값으로

프로세스 커널 오브젝트 사용 카운트 감소
2/4
ExitProcess() 호출
이 방법은 피하는 게 좋다
VOID ExitProcess(UINT fuExitCode);

프로세스를 종료하고 종료 코드를 설정
프로세스는 종료되지 않는다
모든 스레드가 종료되기 전까지
windows 플랫폼 sdk 문서

주 스레드가 진입점 함수로부터 반환하면
ExitProcess() 호출
다른 스레드가 돌던 말던
CRT
완벽히 제거
프로세스, 스레드 OS 리스소

정리 작업이 수행 안 됨
CRT 리소스
3/4
TerminateProcess() 호출
프로세스를 종료할 수 없을 때만
BOOL TerminateProcess(
HANDLE hProcess,
UINT fuExitCode);

다른 프로세스를 종료할 수 있음
종료와 관련된 어떠한 통지도 못 받는다
4/4
프로세스 내의 모든 스레드가 종료
프로세스 종료
모든 스레드가 종료해서
프로세스 주소 공간 유지할 이유가 없다고 판단
마지막 스레드 종료 코드가 프로세스 종료 코드
프로세스가 종료되면?
남아있는 스레드 종료
할당한 리소스 해제
사용자 오브젝트, GDI 오브젝트
커널 오브젝트

종료 코드 설정
종료 전에는 STILL_ACTIVE

시그널 상태로 바뀜(9장 참고)
프로세스 커널 오브젝트 상태

프로세스 커널 오브젝트 사용 카운트 감소
첫 번째 윈도우 애플리케이션 작성
CreateProcess 함수
프로세스 종료
차일드 프로세스 (p160~p163)
관리자가 표준 사용자로 수행되는 경우
관리자 권한 로그온
권한 수준에 맞는
즉, 관리자

보안
토큰

표준 사용자 권한 수준

필터된
토큰
프로세스 생성
시스템이
프로세스를 생성할 때마다
자동으로 전달

보안
토큰

필터된
토큰
권한 상승 요구
관리자 권한이 필요할 때
관리자로 로그인해도
필터된 토큰을 넘겨주기 때문
첫 번째 윈도우 애플리케이션 작성
CreateProcess 함수
프로세스 종료
차일드 프로세스 (p160~p163)
관리자가 표준 사용자로 수행되는 경우
CC BY-NC-SA 3.0

More Related Content

PPTX
04 프로세스
PPTX
07 스레드스케줄링,우선순위,그리고선호도
PPTX
10 동기및비동기장치io
PPTX
Windosw via c 스터디20장.pptx
PPTX
11 윈도우스레드풀
PDF
A story of the passive aggressive sysadmin of AEM
PDF
Android Security & Penetration Testing
PPTX
Reading and Writing Files
04 프로세스
07 스레드스케줄링,우선순위,그리고선호도
10 동기및비동기장치io
Windosw via c 스터디20장.pptx
11 윈도우스레드풀
A story of the passive aggressive sysadmin of AEM
Android Security & Penetration Testing
Reading and Writing Files

What's hot (20)

PDF
Orientação a Objetos em Python
PDF
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
PPT
A Brief Introduction in SQL Injection
PPTX
Managing console input and output
PPS
String and string buffer
PPT
Tratamento de exceções java
PPTX
XXE - XML External Entity Attack
PDF
Efficient Use of indexes in MySQL
PPTX
Let's Go (golang)
PPTX
Building an Empire with PowerShell
PDF
Python twisted
PPT
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
PPTX
Windows via c/c++ ch03. 커널오브젝트
PDF
Exploiting XPC in AntiVirus
PDF
New Framework - ORM
PDF
Red Team Tactics for Cracking the GSuite Perimeter
PDF
Python e tipagem estática
PDF
Time based CAPTCHA protected SQL injection through SOAP-webservice
PPTX
OK Google, How Do I Red Team GSuite?
Orientação a Objetos em Python
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
A Brief Introduction in SQL Injection
Managing console input and output
String and string buffer
Tratamento de exceções java
XXE - XML External Entity Attack
Efficient Use of indexes in MySQL
Let's Go (golang)
Building an Empire with PowerShell
Python twisted
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
Windows via c/c++ ch03. 커널오브젝트
Exploiting XPC in AntiVirus
New Framework - ORM
Red Team Tactics for Cracking the GSuite Perimeter
Python e tipagem estática
Time based CAPTCHA protected SQL injection through SOAP-webservice
OK Google, How Do I Red Team GSuite?
Ad

Viewers also liked (19)

PDF
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
PDF
Intrusive data structure 소개
PDF
트위터 봇 개발 후기
PPTX
Visual C++10을 활용한 병렬 프로그래밍
PPTX
windows via c++ Ch 5. Job
PDF
PINTOS Operating system homework
PDF
[TAOCP] 2.2.3 연결된 할당 - 위상정렬
PDF
[GEG1] 3.volumetric representation of virtual environments
PDF
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
PDF
내가 본 미드 이야기
PDF
2011 아꿈사 오전반 포스트모템
PDF
비트 경제와 공짜
PDF
[Domain driven design] 17장 전략의 종합
PDF
페리 수열(Farey sequence)
PPTX
서버 아키텍처 이해를 위한 프로세스와 쓰레드
PDF
LevelDB 간단한 소개
PDF
넘쳐나는 정보 소화 노하우
PDF
적당한 스터디 발표자료 만들기 2.0
PDF
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
Intrusive data structure 소개
트위터 봇 개발 후기
Visual C++10을 활용한 병렬 프로그래밍
windows via c++ Ch 5. Job
PINTOS Operating system homework
[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[GEG1] 3.volumetric representation of virtual environments
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
내가 본 미드 이야기
2011 아꿈사 오전반 포스트모템
비트 경제와 공짜
[Domain driven design] 17장 전략의 종합
페리 수열(Farey sequence)
서버 아키텍처 이해를 위한 프로세스와 쓰레드
LevelDB 간단한 소개
넘쳐나는 정보 소화 노하우
적당한 스터디 발표자료 만들기 2.0
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
Ad

Similar to [Windows via c/c++] 4장 프로세스 (20)

PPTX
스레드
PPTX
Windows via c++ chapter6
PPTX
Windows via C/C++ 06 스레드의 기본
PPTX
뇌자T etc.windows multi threading programming
PPTX
Windws via c/c++ chapter 6
PPTX
Windows via c++ part 1
PPTX
프로세스
PDF
Process (프로세스의 개념, 특징, 정의)
PPTX
Lightning talk - 11
PDF
Linux 강의자료 ed10
PDF
2. windows system과 file format
PDF
Exception&log
PPTX
System+os study 3
 
PPTX
운영 체제 Sig
PPTX
동기화, 스케줄링
PDF
리눅스 커널 기초 태스크관리
PPTX
Lightning Talk 10
PDF
03 첫번째프로그램
PDF
요람(CreateProcess)에서 무덤(ResumeThread)까지
PPTX
Linux programming study
스레드
Windows via c++ chapter6
Windows via C/C++ 06 스레드의 기본
뇌자T etc.windows multi threading programming
Windws via c/c++ chapter 6
Windows via c++ part 1
프로세스
Process (프로세스의 개념, 특징, 정의)
Lightning talk - 11
Linux 강의자료 ed10
2. windows system과 file format
Exception&log
System+os study 3
 
운영 체제 Sig
동기화, 스케줄링
리눅스 커널 기초 태스크관리
Lightning Talk 10
03 첫번째프로그램
요람(CreateProcess)에서 무덤(ResumeThread)까지
Linux programming study

More from 종빈 오 (16)

PDF
[GEG1] 2.the game asset pipeline
PDF
[TAOCP] 2.5 동적인 저장소 할당
PDF
[GEG1] 24. key value dictionary
PDF
[TAOCP] 1.3.1 MIX 설명
PDF
[GEG1] 10.camera-centric engine design for multithreaded rendering
PDF
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
PDF
[TAOCP] 1.2.1 수학적 귀납법
PDF
[shaderx7] 8.1 Cross-Platform Rendering Thread : Design and Implementation
PDF
2010 아꿈사 오전반 포스트모템
PDF
[shaderx6]8.2 3d engine tools with c++cli
PDF
ManagingHumans/chap1~6
PDF
아꿈사 매니저 인사
PDF
[페차쿠차] 아꿈사 반장 하기
PDF
xUnitTestPattern/chapter7
PDF
적당한 스터디 발표자료 만들기
PDF
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[GEG1] 2.the game asset pipeline
[TAOCP] 2.5 동적인 저장소 할당
[GEG1] 24. key value dictionary
[TAOCP] 1.3.1 MIX 설명
[GEG1] 10.camera-centric engine design for multithreaded rendering
[TAOCP] 1.3.1 MIX 설명, 짝수 연습문제 풀이
[TAOCP] 1.2.1 수학적 귀납법
[shaderx7] 8.1 Cross-Platform Rendering Thread : Design and Implementation
2010 아꿈사 오전반 포스트모템
[shaderx6]8.2 3d engine tools with c++cli
ManagingHumans/chap1~6
아꿈사 매니저 인사
[페차쿠차] 아꿈사 반장 하기
xUnitTestPattern/chapter7
적당한 스터디 발표자료 만들기
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...

[Windows via c/c++] 4장 프로세스