More Related Content
PPTX
PPTX
Windows via c/c++ ch03. ์ปค๋์ค๋ธ์ ํธ PDF
PPTX
[GPG ์คํฐ๋] 1.4 ๊ฒ์ํ๋ก๊ทธ๋๋ฐ์์์ STL ํ์ฉ PPTX
Windws via c/c++ chapter 6 PPTX
Effective STL 1~4์ฅ ์ ๋ฆฌ PPTX
PDF
What's hot
PPTX
PPTX
Windows via c/c++ ์คํฐ๋9์ฅ PPTX
Python_numpy_pandas_matplotlib ์ดํดํ๊ธฐ_20160815 PPTX
Python+numpy pandas 1แแ
งแซ PPTX
Python+numpy pandas 3แแ
งแซ PDF
Effective c++ chapter 1,2 ์์ฝ PDF
PINTOS Operating system homework PPTX
Jupyter notebook ์ดํดํ๊ธฐ PPTX
์ดํํฐ๋ธ C++ ์คํฐ๋ PPTX
์ดํํฐ๋ธ C++ 5,6 ์ฅ ์คํฐ๋ PPTX
[C++adv] STL ์ฌ์ฉ๋ฒ๊ณผ ์ฃผ์ ์ฌํญ PPTX
PPTX
ํ์ด์ฌ ํฌ๋กค๋ง ๋ชจ๋ PPTX
๋ชจ์ด์ดํํฐ๋ธ C++ 3,4์ฅ ์์ธ, ํจ์จ ์คํฐ๋ PPTX
More effective c++ chapter1,2 PPTX
PPTX
PPTX
๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ ์
์ถ๋ ฅ ๋ค์คํ & ๋
ผ๋ธ๋ก์์ผ PDF
PPTX
Similar to Windows via c++ chapter6
PPTX
Windows via C/C++ 06 ์ค๋ ๋์ ๊ธฐ๋ณธ PPTX
07 ์ค๋ ๋์ค์ผ์ค๋ง,์ฐ์ ์์,๊ทธ๋ฆฌ๊ณ ์ ํธ๋ PPTX
PDF
OS Process, Thread, CPU Scheduling์ ๋ํด ์์๋ด
์๋ค.pdf PPTX
Visual C++10์ ํ์ฉํ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ PDF
[Windows via c/c++] 4์ฅ ํ๋ก์ธ์ค PPTX
PPTX
Api design for c++ ch3 pattern PPTX
Windosw via c ์คํฐ๋12์ฅ PPTX
11์ฅ ์๋์ฐ ์ค๋ ๋ ํ PPTX
11์ฅ ์๋์ฐ ์ค๋ ๋ ํ + 12์ฅ ํ์ด๋ฒ PPTX
PPTX
๋์T etc.windows multi threading programming PPTX
PPTX
PPTX
PPTX
Api design for c++ pattern PPTX
PPTX
PPTX
Windows via c++ chapter6
- 1.
- 2.
์ค๋ ๋๋ ๋ฌด์์ธ๊ฐ?
ํ๋ก์ธ์ค์ ์ค๋ ๋๋๋งค์ฐ ์ ์ฌํ ๋ชจ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ํ๋ก์ธ์ค : ํ๋ก์ธ์ค ์ปค๋ ์ค๋ธ์ ํธ์ ์ฃผ์ ๊ณต๊ฐ์ผ๋ก ๊ตฌ์ฑ
์ค๋ ๋ : ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ์ ์ค๋ ๋ ์คํ์ผ๋ก ๊ตฌ์ฑ
ํ๋ก์ธ์ค๋ ์ค์ค๋ก ์ํ ๋ ์ ์๋ค.
๋จ์ํ ์๊ฐํ๋ค๋ฉด ์ค๋ ๋์ ์ ์ฅ์
์ค๋ ๋๋ ํญ์ ํ๋ก์ธ์ค์ ์ปจํ
์คํธ ๋ด์ ์์ฑ๋๋ฉฐ, ํ๋ก์ธ์ค ์์์ ์ด์ ์๋ค.
=์ค๋ ๋๋ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ ๋ด์ ์๋ ์ฝ๋๋ฅผ ์ํํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค.
- 3.
์ค๋ ๋๋ ๋ฌด์์ธ๊ฐ?
ํ๋์ ํ๋ก์ธ์ค๋ด์ ๋ ์ด์์ ์ค๋ ๋๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ค๋ ๋๋ค์ ๋จ์ผ ์ฃผ์ ๊ณต๊ฐ์ ๊ณต์ ํ๊ฒ ๋๋ค.
- ์ค๋ ๋๋ค์ ๋์ผํ ์ฝ๋๋ฅผ ์ํํ ์๋ ์๊ณ , ๋์ผ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ์ ์๋ค.
- ์ปค๋ ์ค๋ธ์ ํธ ํธ๋ค ํ
์ด๋ธ์ ํ๋ก์ธ์ค๋ณ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ค๋ ๋๋ค์ ์ปค๋ ์ค๋ธ์ ํธ ํธ๋ค๋ ๊ณต์
ํ๋ก์ธ์ค๋ ์์ ๋ง์ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์ค๋ ๋์ ๋นํด ๋์ฑ ๋ ๋ง์ ์์คํ
๋ฆฌ์์ค๋ฅผ ์ฌ์ฉ
๊ฐ๋ณ ํ๋ก์ธ์ค๋ ์๋น๋์ ์ ๋ณด๋ฅผ ์์คํ
๋ด๋ถ์ ์ ์ฅํด ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ํ์๋ก ํ๋ค.
๋ฐ๋ฉด ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ๋นํด ์๋นํ ์ ์ ์์คํ
๋ฆฌ์์ค๋ฅผ ํ์๋ก ํ๋ค.
์ค๋ ๋๋ ํ๋ก์ธ์ค์ ๋นํด ๋ถํ๊ฐ ์ ๊ธฐ ๋๋ฌธ์,
ํ๋ก์ธ์ค๋ฅผ ์๋ก ์์ฑํ๋ ๋์ ์ถ๊ฐ์ ์ธ ์ค๋ ๋๋ฅผ ์์ฑํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ ์๋๊ฐ ์ข๋ค.
- 4.
์ค๋ ๋๋ฅผ ์์ฑํด์ผ ํ๋๊ฒฝ์ฐ
๋๋ถ๋ถ์ ์ปดํจํฐ๋ CPU๋ผ๋ ๋งค์ฐ ๊ฐ๋ ฅํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง๊ณ ์์.
CPU๋ฅผ ์ ํด ์ํ๋ก ๋๋ฌ์ผ ํ ํ์๋ ์์ผ๋ฉฐ, CPU๊ฐ ์์
์ ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
CPU๋ฅผ ๋๊ฒ ํ๊ธฐ ์ซ์ ๋ ์ค๋ ๋๋ฅผ ์์ฑ!
- 5.
์ฒ์์ผ๋ก ์์ฑํ๋ ์ค๋ ๋ํจ์
๋ชจ๋ ์ค๋ ๋๋ ์ํ์ ์์ํ ์ง์
์ ํจ์๋ฅผ ๋ฐ๋์ ๊ฐ์ ธ์ผ ํ๋ค.
ํ๋ก์ธ์ค ๋ด์ ๋ ๋ฒ์งธ ์ค๋ ๋๋ฅผ ๋ง๋ค๋ ค๋ฉด ์๋ก ์์ฑ๋๋ ์ค๋ ๋๋ ์๋์ ๊ฐ์ ์ง์
์ ํจ์๋ฅผ ๊ฑฐ์ณ์ผํจ.
- ์ค๋ ๋ ํจ์๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์์
์ ์ด๋ค ๊ฒ์ด๋ผ๋์ํ
- ์ค๋ ๋ ํจ์๋ ์ธ์ ๊ฐ๋ ๋๋ ๊ฒ์ด๊ณ ๋ฐํ๋ ๊ฒ
- ์ค๋ ๋ ํจ์๊ฐ ๋ฐํ๋๋ ์์ ์ ์ค๋ ๋๋ ์ํ์ ๋ฉ์ถ๊ณ ์คํ ๋ฐํ
- ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ ์ฌ์ฉ ์นด์ดํธ ๊ฐ์
- ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ ์ฌ์ฉ 0์ด ๋๋ฉด ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ ํ๊ดด
- 6.
์ค๋ ๋๋ฅผ ์์ฑํด์ผ ํ๋๊ฒฝ์ฐ
์ค๋ ๋ ํจ์๋ ๋ฐ๋์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค
- ์ด ๊ฐ์ ๋์ค์ ์ค๋ ๋์ ์ข
๋ฃ ์ฝ๋๊ฐ ๋๋ค.
์ค๋ ๋ ํจ์๋ ๊ฐ๋ฅํ ํจ์๋ก ์ ๋ฌ๋ ๋งค๊ฐ๋ณ์์ ์ง์ญ ๋ณ์๋ง์ ์ฌ์ฉํ๋๋ก ์์ฑ๋๋ ๊ฒ์ด ์ข๋ค.
- ์ ์ ๋ณ์๋ ์ ์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ค์์ ์ค๋ ๋๊ฐ ๋์์ ๋ณ์์ ์ ๊ทผ ํ ์ ์๊ฒ ๋๋ฉฐ,
๋ณ์์ ๊ฐ์ด ์๋ชป ๋ณ๊ฒฝ๋๋ ์์ธ์ด ๋๊ธฐ๋ ํ๋ค.
- 7.
CreateThread ํจ์
๋ ๋ฒ์งธ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์ถ๋ค๋ฉด ์ด๋ฏธ ์ํ์ค์ธ ์ค๋ ๋ ๋ด์์ CreateThread๋ฅผ ํธ์ถ
CreateThread๊ฐ ํธ์ถ๋๋ฉด ์์คํ
์ ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ ์์ฑ
์์คํ
์ ์ค๋ ๋ฃ๊ฐ ์ฌ์ฉํ ์คํ ํ๋ณด
์๋ก์ด ์ค๋ ๋๋ ์ค๋ ๋๋ฅผ ์์ฑํ ํ๋ก์ธ์ค์ ๋์ผํ ์ปจํ
์คํธ ๋ด์์ ์ํ
์๋ก์ด ์ค๋ ๋๋ ๋ชจ๋ ์ค๋ ๋์ ์คํ์ ์กฐ์ฐจ ์ ๊ทผ ๊ฐ๋ฅ
= ๋์ผ ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ค์ ์์ฝ๊ฒ ์ํธ ํต์
- 8.
CreateThread ํจ์
PSECURITY_ATTRIBUTES psa
-SECURITY_ATTRIBUTES ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
- ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ์ ๋ํด ๊ธฐ๋ณธ ๋ณด์ ํน์ฑ์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ฉด NULL ์ ๋ฌ
- Child proces๋ก ํด๋น ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ ํธ๋ค์ ์์กํ๋๋ก ํ๋ ค๋ฉด,
SECURITY_ATTRIBUTES ๊ตฌ์กฐ์ฒด์ bInhertHandle๋ฉค๋ฒ๋ฅผ TRUE๋ก ์ด๊ธฐํ.
DWORD cbStackSize,
- ์ค๋ ๋๊ฐ ์์ ์ ์คํ์ ์ํด ์ผ๋ง๋งํผ์ ์ฃผ์ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ง๋ฅผ ์ง์
- StackSize 0 ์ด์ธ์ ๊ฐ์ ์ง์ ํ๋ฉด ํจ์๋ ์ค๋ ๋ ์คํ์ ํ๋ณดํ๊ธฐ ์ํด ์ง์ ๋
- ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฝํ๊ณ ์ปค๋ฐ
- ๋ง์ผ ์์คํ
์ด ์คํ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ ํํ์ง ์๋๋ค๋ฉด ์ฌ๊ทํธ์ถ์ ์ ๋๋ก ์ข
๋ฃ๋์ง ์์
- 9.
CreateThread ํจ์
PTHREAD_START_ROUTINE pfnStartAddr
-pfnStartAddr ๋งค๊ฐ๋ณ์๋ ์๋ก์ด ์์ฑ๋๋ ์ค๋ ๋๊ฐ ํธ์ถํ ์ค๋ ๋ ํจ์์ ์ฃผ์๋ฅผ ๊ฐ๋ฅดํด
PVOID pvParam
- CreateThread ํจ์์ pvParam ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ๊ฐ์ด ๊ทธ๋๋ก ์ ๋ฌ
- CreateThread ํจ์๋ ์ค๋ ๋๊ฐ ์์๋ ๋ ์ด ๋งค๊ฐ๋ณ์๋ฅผ ์ค๋ ๋ ํจ์์ ์ ๋ฌํ๋ ๊ฒ ์ธ์
๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ์ง ์๋๋ค.
- 10.
CreateThread ํจ์
DWORD dwCreateFlags
-dwCreateFlags ๋งค๊ฐ๋ณ์๋ ์ค๋ ๋๋ฅผ ์์ฑํ ๋ ์ธ๋ถ์ ์ธ ์ ์ด๋ฅผ ์ํํ๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ ํ๋๊ทธ๋ฅผ ์ง์ ํ๋๋ฐ ์ฌ์ฉ
- ๊ฐ์ผ๋ก 0์ ์ ๋ฌํ๋ฉด ์ค๋ ๋๋ ์์ฑ๋๋ ์ฆ์ CPU์ ์ํด ์ค์ผ์ค์ด ๊ฐ๋ฅํ๊ฒ ๋จ
- ๊ฐ์ผ๋ก CREATE_SUSPENDED๋ฅผ ์ ๋ฌํ๋ฉด ์์คํ
์ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํ๋ฅผ ์๋ฃ ํ ํ ์ผ์ ์ ์ง ์ํ ์ ์ง
PDWORD pdwThreadID
- pdwThreadID์๋ ์๋ก์ด ์ค๋ ๋์ ํ ๋น๋๋ ์ค๋ ๋ ID๊ฐ์ ์ ์ฅํ DWORD ๋ณ์๋ฅผ
๊ฐ๋ฆฌํค๋ ์ฃผ์๋ก ์ง์ ํ๋ฉด ๋๋ค.
- 11.
์ค๋ ๋์ ์ข
๋ฃ
์ค๋ ๋๋ 4๊ฐ์ง๋ฐฉ๋ฒ์ผ๋ก ์ข
๋ฃ ๋ ์ ์๋ค.
1. ์ค๋ ๋ ํจ์๊ฐ ๋ฐํ๋๋ค. (์ด ๋ฐฉ๋ฒ์ ๊ฐ๋ ฅํ ์ถ์ฒ)
2. ์ค๋ ๋ ํจ์ ๋ด์์ ExitThread ํจ์๋ฅผ ํธ์ถํ๋ค. (๋น์ถ์ฒ)
3. ๋์ผํ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ TerminateThread ํจ์๋ฅผ ํธ์ถํ๋ค. (๋น์ถ์ฒ)
4. ์ค๋ ๋๊ฐ ํฌํจ๋ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๋ค. (๋น์ถ์ฒ)
- 12.
1. ์ค๋ ๋ ํจ์๋ฐํ
ํญ์ ์ค๋ ๋ ํจ์๊ฐ ๋ฐํ๋๋๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ข๋ค. ์ด๊ฒ์ ์ค๋ ๋๊ฐ ์ฌ์ฉํ ์์์ ์ ์ ํ
์ ๋ฆฌํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ค.
- ์ค๋ ๋ ํจ์ ๋ด์์ ์์ฑํ C++ ์ค๋ธ์ ํธ๋ค์ ํ๊ดด์๋ฅผ ํตํด ์ ์ ํ ์ ๊ฑฐ
- ์ด์์ฒด์ ๋ ์ค๋ ๋ ์คํ์ผ๋ก ์ฌ์ฉํ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํ
- ์์คํ
์ ์ค๋ ๋์ ์ข
๋ฃ ์ฝ๋๋ฅผ ์ค๋ ๋ ํจ์์ ๋ฐํ๊ฐ์ผ๋ก ์ค์
- ์์คํ
์ ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ์ ์ฌ์ฉ ์นด์ดํธ๋ฅผ ๊ฐ์
- 13.
2. ExitThread ํจ์
ExitThreadํจ์๋ฅผ ํธ์ถํ์ฌ ์ค๋ ๋๋ฅผ ๊ฐ์ ๋ก ์ข
๋ฃ ํ ์ ์๋ค.
- ์ค๋ ๋๋ฅผ ๊ฐ์ ๋ก ์ข
๋ฃํ๊ณ ์ด์ ์ฒด์ ๊ฐ ์ค๋ ๋์์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ด์์ฒด์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๋๋ก ํจ
- C/C++ ๋ฆฌ์์ค๋ ์ ๋ฆฌ๋์ง ์๋๋ค.
- ExitThread ํจ์๋ฅผ ํธ์ถํ๊ธฐ ๋ณด๋ค๋ ์ค๋ ๋ ํจ์๋ฅผ ๋ฐํํ๋๋ก ํ๋๊ฒ ๋ ์ข๋ค.
- ExitThread ํจ์๋ ๋ฐํ๋์ง ์๋ ํจ์์ด๊ธฐ ๋๋ฌธ์ ์ดํ์ ๋์จ์ ์ฝ๋๋ ์ํ๋์ง ์๋๋ค.
-
- 14.
3. TerminateThread ํจ์
TerminateThreadํจ์๋ฅผ ํธ์ถํ์ฌ ์ค๋ ๋๋ฅผ ์ข
๋ฃ ํ ์ ์๋ค.
- ExitThread ํจ์๊ฐ ์ด ํจ์๋ฅผ ํธ์ถํ๋ ์ค๋ ๋๋ฅผ ์ข
๋ฃํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ด๋ ํ ์ค๋ ๋๋ผ๋ ์ข
๋ฃ
- ์ค๋ ๋๊ฐ ์ข
๋ฃ๋๋ฉด ์ค๋ ๋์ ์ข
๋ฃ ์ฝ๋๋ dwExitCode ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ๊ฐ์ผ๋ก ์ค์
์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ์ ์ฌ์ฉ ์นด์ดํธ๋ ๊ฐ์
- ์ ์ค๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ผ๋ฉด ์ ๋๋ก ์ด ํจ์๋ฅผ ํธ์ถ ํ์ง ์๋๋ค.
- ์ด ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ข
๋ฃ๋ ์ค๋ ๋๋ ์์ ์ด ๊ณง ์ข
๋ฃ๋ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ์ ๋ฌ๋ฐ์ง ๋ชปํ๊ธฐ ๋๋ฌธ
-> ์ ์ ํ ์ ๋ฆฌ ์์
์ ์ํํ ์ ์๊ณ , ์ข
๋ฃ ์์ฒด๋ฅผ ํํผํ ์๋ ์๋ค.
- 15.
4. ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๋ฉด
-ํ๋ก์ธ์ค๊ฐ ์์ ํ ๋ชจ๋ ์ค๋ ๋ ์ข
๋ฃ
- ExitProcess์ TerminateProcess ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ์๋ ์ค๋ ๋๋ ์ข
๋ฃ
- ์ฐจ์ด์ ์ ์ด๋ฌํ ํจ์๋ค์ ํธ์ถํ๋ฉด ํ๋ก์ธ์ค๊ฐ ์์ ํ๊ณ ์๋ ๋ชจ๋ ์ค๋ ๋๊ฐ ์ข
๋ฃ
- ์ ์ฒด ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ค๋ ๋ชจ๋ ์ ๋ฆฌ
- ์ค๋ ๋๋ค์ด ์ฌ์ฉํ๋ ์คํ๋ค๋ ์ ๋ฆฌ
- ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข
๋ฃํ๋ฉด ํ๋ก์ธ์ค ๋ด์ ๋จ์์๋ ์ค๋ ๋๋ค์ ๋ํด ๊ฐ๊ฐ TerminateThread ํจ์ ํธ์ถ
- ํ๋ก์ธ์ค๋ฅผ ์ด์ ๊ฐ์ด ์ข
๋ฃํ๊ฒ ๋๋ฉด C++ ํ๊ดด์๊ฐ ํธ์ถ๋์ง๋ ๋ชปํ๊ณ ์๋ฃ์ ๋ฆฌ๋ ์ํ๋์ง ์์.
- 16.
5. ์ค๋ ๋๊ฐ ์ข
๋ฃ๋๋ฉด
-์ค๋ ๋๊ฐ ์์ ํ๊ณ ์๋ ๋ชจ๋ ์ ์ ์ค๋ธ์ ํธ ํธ๋ค์ด ์ญ์
- ์ค๋ ๋์ ์ข
๋ฃ ์ฝ๋๋ STILL_ACTIVE์์ ExitThead๋ TerminateThread์์ ์ง์ ํ ์ข
๋ฃ ์ฝ๋๋ก ๋ณ๊ฒฝ
- ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ์ ์ํ๊ฐ ์๊ทธ๋ ์ํ๋ก ๋ณ๊ฒฝ
- ์ข
๋ฃ๋๋ ์ค๋ ๋๊ฐ ํ๋ก์ธ์ค ๋ด์ ๋ง์ง๋ง ํ์ฑ ์ค๋ ๋๋ผ๋ฉด ์์คํ
์ ํ๋ก์ธ์ค๋ ๊ฐ์ด ์ข
๋ฃ๋์ด์ผ ํจ
- ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ์ ์ฌ์ฉ ์นด์ดํธ๊ฐ 1๋งํผ ๊ฐ์
- 17.
์ค๋ ๋์ ๋ด๋ถ
์ค๋ ๋ ์ปค๋์ค๋ธ์ ํธ
๋ค๋ฅธ ์์ฑ๊ณผ ํต๊ณ ์ ๋ณด
์ฌ์ฉ ์นด์ดํธ = 2
์ ์ง ์นด์ดํธ = 1
์ข
๋ฃ ์ฝ๋ = STILL_ACTIVE
์๊ทธ๋ ์ํ = FALSE
์ปจํ
์คํธ
SP
IP
๋ค๋ฅธ CPU ๋ ์ง์คํฐ
์ค๋ ๋ ์คํ
pvParam
pfnStartAddr
.
.
.
NTDLL.dll
VOID RtlUserThreadStart(โฆ)
{
โฆ
}
- 18.
์ค๋ ๋์ ๋ด๋ถ
CreateThread ํจ์๊ฐํธ์ถ๋๋ฉด ์์คํ
์ ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ ์์ฑ
์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋๋ฉด ์ค๋ ๋ ์คํ์ผ๋ก ํ์ฉํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋น
์ค๋ ๋๋ ์์ ๋ง์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง์ง ์์ผ๋ฏ๋ก ์คํ์ผ๋ก ํ์ฉํ ๋ฉ๋ชจ๋ฆฌ๋
ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ผ๋ก ํ ๋น
์ดํ ์์คํ
์ ์๋ก ์์ฑ๋ ์ค๋ ๋ ์คํ์ ๊ฐ์ฅ ์์์ ๋ ๊ฐ์ ๊ฐ์ ๊ธฐ๋ก
- 19.
์ค๋ ๋์ ๋ด๋ถ
๊ฐ ์ค๋ ๋๋์์ ๋ง์ CPU ๋ ์ง์คํฐ ์ธํธ๋ฅผ ๊ฐ์ง๋๋ฐ, ์ด๋ฅผ ์ค๋ ๋ ์ปจํ
์คํธ๋ผ๊ณ ๋ถ๋ฆ
์ด๋ฌํ ์ปจํ
์คํธ๋ ์ค๋ ๋๊ฐ ๋ง์ง๋ง์ผ๋ก ์ํ๋์์ ๋น์์ ์ค๋ ๋ CPU ๋ ์ง์คํฐ๊ฐ์ ๊ฐ์ง
์ธ์คํฐ๋ญ์
ํฌ์ธํฐ(IP) ๋ ์ง์คํฐ์ ์คํ ํฌ์ธํฐ(SP) ๋ ์ง์คํฐ
- ์ค๋ ๋ ์ปจํ
์คํธ์ ์ ์ฅ๋๋ ๊ฐ ์ค ๊ฐ์ฅ ์ค์ํ ๋ ์ง์คํฐ
- ์ค๋ ๋๋ ํญ์ ํ๋ก์ธ์ค์ ์ปจํ
์คํธ ๋ด๋ถ์์ ์ํ
->ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์ ํน์ ์์น๋ฅผ ๊ฐ๋ฅดํด
- ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ๊ฐ ์ด๊ธฐํ๋๋ฉด CONTEXT ๊ตฌ์กฐ์ฒด ๋ด์ ์คํ ํฌ์ธํฐ ๋ ์ง์คํฐ๋
pfnStartAddr๋ฅผ ์ ์ฅํ๊ณ ์๋ ์ค๋ ๋ ์คํ์ ์ฃผ์๋ก ์ค์
- 20.
์ค๋ ๋์ ๋ด๋ถ
- ์ค๋ ๋์์ด๊ธฐํ๊ฐ ์๋ฃ๋๋ฉด ์์คํ
์ CreateThead ํจ์ ํธ์ถ ์ CREATE_SUSPENDED ํ๋๊ทธ๊ฐ
์ ๋ฌ ๋์๋์ง ํ์ธ
- ์ค๋ ๋๊ฐ CPU ์๊ฐ์ ์ป์ผ๋ฉด ์์คํ
์ ์ค๋ ๋ ์ปจํ
์คํธ์ ๋ง์ง๋ง์ผ๋ก ์ ์ฅ๋ ๊ฐ์ CPU ๋ ์ง์คํฐ๋ก ๋ก๋
ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ ๋ด์ ์๋ ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฑ์ ์์
์ ํ๋ค.
- ์๋ก์ด ์ค๋ ๋์ IP๊ฐ RtlUserThreadStart๋ก ์ค์ -> ์ค์ง์ ์ผ๋ก ์ํํ๋ ์ต์ด ์์น
- RtlUserThreadStartํจ์๋ ์์ ์ฝ๋๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ข
์ด๊ธฐํ๋ฅผ ์งํํ๊ณ ์ง์
์ ํจ์ ํธ์ถ
- RtlUserThreadStart ๋ด์์ ์ค๋ ๋๊ฐ ExitThread๋ ExitProcess๋ฅผ ํธ์ถํ๋ค๋ ์ฌ์ค
-> ์ค๋ ๋๋ RtlUserThreadStart๋ก ๋ถํฐ ๋ฐํ๋์ง ๋ชปํ๊ณ ๋ด๋ถ์ ์ผ๋ก ์ข
๋ฃ
- 21.
C/C++ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ํ ๊ณ ์ฐฐ
- ๋ฉํฐ ์ค๋ ๋ ๊ธฐ๋ฐ์ C/C++ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ๋์ํ๋ ค๋ฉด C/C++ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ค์ ์ฌ์ฉํ๋
๊ฐ ์ค๋ ๋๋ณ๋ก ์ ์ ํ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ๋ธ๋ก์ ์์ฑํด์ผ ํ๋ค.
_beginthreadex
- ์ด์์ฒด์ ๋ ์๋ก์ด ์ค๋ ๋๊ฐ ์์ฑ๋์์ ๋ ์ด๋ป๊ฒ ์๋ก์ด ๋ฐ์ดํฐ ๋ธ๋ก์ ํ ๋นํด์ผ ํ ์ง ๋ชจ๋ฅธ๋ค.
- C/C++ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ _beginthreadex๋ฅผ ํธ์ถ
_beginthreadex ํจ์์ ํน์ง
- ๊ฐ ์ค๋ ๋๋ C/C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ _tiddata๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๊ฐ์ง
- _beginthreadex ํจ์์ ์ ๋ฌ๋ ์ค๋ ๋ ํจ์์ ์ฃผ์๋ _tiddqata ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก ๋ด์ ์ ์ฅ
- ๋ด๋ถ์ ์ผ๋ก CreateThreadํจ์๋ฅผ ํธ์ถ
- ์ ์์ ์ธ ๊ฒฝ์ฐ CreateThread์ ๋์ผํ๊ฒ ์ค๋ ๋ ํธ๋ค์ ๋ฐํํ๋ฉฐ, ๋ฌธ์ ๊ฐ ์์ ์ 0์ ๋ฐํ
- 22.
C/C++ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ํ ๊ณ ์ฐฐ
_threadstartex
- ์๋ก ์์ฑ๋ ์ค๋ ๋๋ RtlUserThreadStart๋ฅผ ํธ์ถํ๊ณ _threadstartex๋ก ์ง์
- ์๋ก ์์ฑ๋ ์ค๋ ๋์ _tiddata๋ธ๋ก์ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ
- ์ฌ์ฉ์ ์ ์ ์ค๋ ๋ ํจ์๊ฐ ์ ๋ฌํ ๋งค๊ฐ๋ณ์ ๊ฐ์ผ๋ก ํธ์ถ
- ์ฌ์ฉ์๊ฐ ์ง์ ํ ์ค๋ ๋ ํจ์์ ๋ฐํ๊ฐ์ ์ค๋ ๋์ ์ข
๋ฃ ์ฝ๋๊ฐ ๋จ.
- _callthreadstartex๋ ๋จ์ํ _threadstartex๋ก ๋ฐํ๋๊ณ , ๊ณ์ํด์ RtlUserThreadStart๋ก ๋ฐํ๋๋ ๊ตฌ์กฐ๊ฐ
์๋์ ์ฃผ๋ชฉ. ๋ง์ผ ๊ทธ๋ ๊ฒ ๋๋ฉด ์ค๋ ๋๋ ์ข
๋ฃ๋๊ณ , ์ค๋ ๋์ ์ข
๋ฃ ์ฝ๋๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง,
_tiddata ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ํด์ ๋์ง ์์ ๊ฒ์ด๋ค. -> ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐ์์ํจ๋ค.
- 23.
C/C++ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ํ ๊ณ ์ฐฐ
_endtreadex
- c/c++ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ธ _getpid_noexit ํจ์๋ ์ด ํจ์๋ฅผ ํธ์ถํ๋ ์ค๋ ๋์
_tiddata ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ด์์ฒด์ ์ TlsGetValue ํจ์๋ฅผ ํธ์ถ
- _tiddata ๋ธ๋ก์ด ์ญ์ ๋๊ณ ์ด์์ฒด์ ์ ExitThreadํจ์๊ฐ ํธ์ถ๋์ด ์ค๋ ๋๋ฅผ ํ๊ดด
์ด ๊ณผ์ ์์ ์ข
๋ฃ ์ฝ๋๊ฐ ์ ๋ฌ๋๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์
- C/C++ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ _beginthreadex๋ฅผ ํธ์ถํด์ฃผ๋ฉด ๋จ.
- 24.
์์ ์ ๊ตฌ๋ถ์ ์ป๊ธฐ
-์ค๋ ๋๊ฐ ์ํ๋๋ฉด ์ข
์ข
์์ ์ ์ํ ํ๊ฒฝ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ์๋์ฐ ํจ์๋ฅผ ํธ์ถํด์ผ ํจ
- ์ค๋ ๋๊ฐ ์์ ์ ์ํ ํ๊ฒฝ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์์
์ด๊ธฐ ๋๋ฌธ์ ์๋์ฐ ์ด์์ฒด์ ๋
์ค๋ ๋๊ฐ ์์ ์ ์์ ํ๋ ํ๋ก์ธ์ค์ ์ปค๋ ์ค๋ธ์ ํธ๋ ์์ ์ ๋ํ๋ด๋ ์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ๋ฅผ
์ ์ฝ๊ฒ ์ป์ ์ ์๋ ํจ์๋ฅผ ์ ๊ณต
- ์ด ๋๊ฐ์ ํจ์๋ ํด๋น ํจ์๋ฅผ ํธ์ถํ ์ค๋ ๋๋ฅผ ์์ ํ๊ณ ์๋ ํ๋ก์ธ์ค๋ ์ค๋ ๋ ์์ ์ ๋ํ๋ด๋
์ค๋ ๋ ์ปค๋ ์ค๋ธ์ ํธ์ ํ์ ํธ๋ค์ ๋ฐํ
- 25.
ํ์ ํธ๋ค์ ์ค์ ํธ๋ค๋ก ๋ณ๊ฒฝํ๊ธฐ
- ๋๋๋ก ํ์ ํธ๋ค ๋์ ์ค์ ํธ๋ค ๊ฐ์ ์ป์ด ์์ผ ํ ๋๋ ์๋ค.
- ์ค๋ ๋์ ํ์ ํธ๋ค์ ํญ์ ํ์ฌ ์ค๋ ๋์ ํธ๋ค์ด๋ค
= ํ์ ํธ๋ค์ ํจ์๋ฅผ ํธ์ถํ ์ค๋ ๋ ์์ ์ ๋ํ๋ธ๋ค.
- ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ํ์ ํธ๋ค์ ์ค์ ํธ๋ค๋ก ๋ณ๊ฒฝ ํด์ผ ํ๋ค.
DuplicateHandle ํจ์๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ฌํ ๋ณ๊ฒฝ ์์
์ ์ํ ํ ์ ์๋ค