๋ฆฌ๋ฒ์ฑ ์
๋ฌธ ์ด๋ผ๋ ์ฑ
์ ์ฝ์ผ๋ฉด์ ์ ๊ฒ ๋์์ด ๋์๋ ์ ๋ณด๋ค์ ์กฐ๊ธ ๋
์ด๊ฒ ์ ๊ฒ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ ๋ด์ฉ์
๋๋ค.
์ ๊ฐ ๊ณต๋ถํ ๊ฒ์ ๋ณต์ตํ๊ณ ์ฐพ์๋ณผ ๋ชฉ์ ์ผ๋ก ์ฌ๋ฆฐ ๊ธ์
๋๋ค
ํน์ ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์ง์ ํด์ฃผ์ธ์!
[section 1 - ๋ฆฌ๋ฒ์ฑ์ ์ํ ํ๋ก๊ทธ๋จ ์คํ ๊ตฌ์กฐ]
์ปดํจํฐ์ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์์๋ CPU, ๋ฉ๋ชจ๋ฆฌ, ํ๋๋์คํฌ ์ด๋ค.
ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด์ ๋ฐฐํฌํ๋ฉด ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ ํ์ผ(exe)์ ๊ธฐ๋ณธ์ ์ผ๋ก HDD์ ์ ์ฅ๋๋ค.
https://bi.snu.ac.kr/~bhkim/lectures/digi_com_10f_snu/02.Architecture.pdf
CPU๋ ์ ์ด์ฅ์น, ์ฐ์ฐ์ฅ์น, ๋ ์ง์คํฐ๋ก ๋๋จ.
์๋๋ CPU๊ฐ ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ โผ
https://cloudstudying.kr/lectures/183
๋ ์ง์คํฐ๊ฐ ๊ฐ์ฅ ๋น ๋ฆ
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
goodgid.github.io/Memory-Structure/ > ์ด ์ฃผ์์์ ๋งค์ฐ ์์ธํ ์ค๋ช
๋์ด์์ผ๋ ์ฐธ๊ณ ํด์ฃผ์ธ์.
ํ๋ก๊ทธ๋จ ๋์๊ณผ์
https://jinshine.github.io/2018/05/17/%EC%BB%B4%ED%93%A8%ED%84%B0%20%EA%B8%B0%EC%B4%88/%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B5%AC%EC%A1%B0/
์๋์ฐ์์๋ ์คํํ์ผ์ PEํ์ผ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
PEํ์ผ์๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ฐ ํ์ํ ๊ธฐ๋ณธ ์ ๋ณด์ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋์ ์ ์ฅํด์ผ ํ ์ง ์๋ ค์ฃผ๋ ๋ฐฐ์น ์ ๋ณด๊ฐ
๋ค์ด์๋ค. PEํ์ผ์ ํค๋, ๋ฐ๋๋ก ๊ตฌ์ฑ๋์ด์๊ณ , ํค๋์ ์ด๋ฐ ์ค์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ ์์ผ๋ฉฐ, body์๋ ์ฝ๋์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ค. PEํ์ผ์ ์ข
๋ฅ๋ก๋ exe, dll, ocx๋ฑ ๋ค์ํ ์ข
๋ฅ๊ฐ ์์ง๋ง ๋จผ์ exeํ์ผ์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
PEํ์ผ์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ ๋ ๋๋ ์ฝ๋ ์์ญ๊ณผ ๋ฐ์ดํฐ ์์ญ์ ์๋ฃ๊ฐ ๋ค์ด๊ฐ๋ค.
์ด ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด์ ์คํ, ํ ์์ญ์ ๋ฐ์ดํฐ๊ฐ ์์ด๊ฒ ๋๋ค.
C์ธ์ด๊ฐ mainํจ์๋ก ์์ํ๋ฏ, PEํ์ผ์ ์์์ ์(์ฒ์ ์คํ๋๋ ์์น) Entry Point๋ผ๊ณ ํ๋ค.
ํ๋์ ํ๋ก๊ทธ๋จ์ด CPU๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์์ ์๊ฒ ํ์ํ ๋ฐ์ดํฐ๋ก ๋ ์ง์คํฐ์ ๋ด์ฉ์ ์ ๋ถ ๋ฐ๊ฟ์ผ ํ๋ค.
์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ CPU๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
CPU์ฌ์ฉ์ด ๋๋๋ฉด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ด ๊ถํ์ ๋๊ฒจ ์ฃผ๋๋ฐ, ์ด๋ ์์ ์ด ์ฌ์ฉํ๊ณ ์๋ ๋ชจ๋ ๋ ์ง์คํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ๋ณต์ฌํด๋๋๋ค. ์ด๊ฒ์ Context Switching์ด๋ผ๊ณ ํ๋ค.
Context Switching์ด ๋ฌด์์ธ๊ฐ?
๋ฉํฐํ๋ก์ธ์ค ํ๊ฒฝ์์ CPU๊ฐ ์ด๋ค ํ๋์ ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ณ ์๋ ์ํ์์ ์ธํฐ๋ฝํธ ์์ฒญ์ ์ํด ๋ค์ ์ฐ์ ์์์ ํ๋ก์ธ์ค๊ฐ ์คํ๋์ด์ผ ํ ๋ ๊ธฐ์กด์ ํ๋ก์ธ์ค์ ์ํ ๋๋ ๋ ์ง์คํฐ ๊ฐ(Context)์ ์ ์ฅํ๊ณ CPU๊ฐ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ์ํํ๋๋ก ์๋ก์ด ํ๋ก์ธ์ค์ ์ํ ๋๋ ๋ ์ง์คํฐ ๊ฐ(Context)๋ฅผ ๊ต์ฒดํ๋ ์์
์ Context Switch(Context Switching)๋ผ๊ณ ํ๋ค.
์ถ์ฒ: https://jeong-pro.tistory.com/93
[section 2 - ๋ ์ง์คํฐ]
lucete1230-cyberpolice.tistory.com/45
[์ด์
๋ธ๋ฆฌ์ด] ๋ ์ง์คํฐ
์ค๋์ ๋ ์ง์คํฐ์ ๋ํ ํฌ์คํ
์ ํด๋ณด๋ ค๊ณ ํด์. ์ด์
๋ธ๋ฆฌ์ด๋ฅผ ๊ณต๋ถํ๋ค๋ณด๋ฉด ax,ah ๋ฑ ๋ง์ ๋ ์ง์คํฐ๋ค์ด ๋ฑ์ฅ์ ํ๋๋ฐ, ์ ๋ ์ด ๋ ์ง์คํฐ๊ฐ ๋ฌด์์ธ์ง ์ ๋๋ก ์ดํดํ์ง ๋ชปํ๊ณ ์์๊ธฐ๋๋ฌธ์ ๏ฟฝ๏ฟฝ
lucete1230-cyberpolice.tistory.com
Register๋ CPU์์ ์ฌ์ฉํ๋ ๊ณ ์์ ๊ธฐ์ต์ฅ์น์ด๋ค.
CPU๋ ์ฐ์ฐ์ ์ํํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ CPU๋ด๋ถ์ ์๋ ๋ ์ง์คํฐ๋ก ๊ฐ์ง๊ณ ์จ๋ค.
์ฐ์ฐ ์ค๊ฐ์๋ ๋ ์ง์คํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์๋๋ ๋ ์ง์คํฐ ์ข
๋ฅ์ธ๋ฐ, ๋ฆฌ๋ฒ์ฑ ์
๋ฌธ ๊ต์ฌ์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ก ๋ฌด๋ฃ ๋ฐฐํฌ ๋์ด์๋ ๋ถ๋ถ์ด๋ผ์ ์ถ์ฒ๋ฅผ ๋จ๊ธฐ๊ณ ๊ฐ์ ธ์์ต๋๋ค.
์ ๋ธ๋ก๊ทธ ์ฃผ์์ ํจ๊ป ์ฐธ๊ณ ํด์ฃผ์ธ์.
๋ ์ง์คํฐ๋ ๊ฐ ์ฉ๋๊ฐ ์์ผ๋ฉฐ, ์๋ก ๊ฐ์ ์ฉ๋๋ก ์ฐ์ด๊ธฐ๋ ํฉ๋๋ค.
EBP, ESP๋ ๊พธ์คํ ๋ณด์ผ ๋ ์ง์คํฐ๋ค ์ธ๋ฐ์, ์ฃผ์๋ฅผ ๊ฐ๋ฅดํค๋ ๋
์๋ค์
๋๋ค.
[section 3 - ์คํ๊ณผ ์คํํ๋ ์]
์คํ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋ถ๋ถ์ผ๋ก (LIFO) ๋ฐฉ์์ผ๋ก ๋์ํ๋ ํน๋ณํ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
LIFO : ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ์ฒ์์ ๋์ค๋ ๋ฐฉ์
์คํ ํ๋ ์ : ์๋ธ ๋ฃจํด(ํจ์)์ด ๊ฐ์ง๋ ์์ ๋ง์ ์คํ ์์ญ์ด๋ค.
์คํ ํ๋ ์์์๋ ์๋ธ ๋ฃจํด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
ํจ์ ํธ์ถ --> ์คํํ๋ ์ ์์ฑ --> ํจ์ ์ข
๋ฃ --> ๋ณต๊ท์ฃผ์๋ก ๋์๊ฐ --> ์คํํ๋ ์ ์๋ฉธ
์๋ธ ๋ฃจํด์ด๋?
ํจ์(function), ์๋ธ๋ฃจํด(subroutine), ๋ฃจํด(routine), ๋ฉ์๋(method), ํ๋ก์์ (procedure)๋ ์ํํธ์จ์ด์์ ํน์ ๋์์ ์ํํ๋ ์ผ์ ์ฝ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค.
ํจ์๋ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ผ๋ก, ํ๋์ ํฐ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋๋์ด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ํจ์๋ฅผ ์ฌ๋ฌ ์ํฉ์์ ์ฌ๋ฌ ์ฐจ๋ก ํธ์ถํ ์ ์์ผ๋ฉฐ ์ผ๋ถ๋ถ์ ์์ ํ๊ธฐ ์ฝ๋ค๋ ์ฅ์ ์ ๊ฐ์ง๋ค.
https://goodgid.github.io/Memory-Structure/
๋ค์ ํฌ์คํ
์์ PEํ์ผ์ ๋ํด ์ค๋ช
ํ๋๋ก ํ๊ฒ ์ต๋๋ค.