๐ง ํ๋ก์์ ์ ์คํ
ํ๋ก์์ ๋ ์ง์ ๋ ์ธ์๋ค๊ณผ ๋ฆฌํด ๊ฐ์ผ๋ก ํน์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์ฝ๋๋ฅผ ๊ฐ์ธ์ฃผ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํ๋ก์์ P๊ฐ ํ๋ก์์ Q๋ฅผ ํธ์ถํ ๋ค,
Q๊ฐ ์คํ๋ ํ ๋ค์ P๋ก ๋ฆฌํด๋๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
์ฆ ๋ค์๊ณผ ๊ฐ์ ํ์์ ๋๋ค.
Q() {
F();
}
ํ๋ก์์ ๋ฅผ ๊ธฐ๊ณ์ด ์์ค์์ ์ง์ํ๊ธฐ ์ํด ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ์ฌ๋ฌ ํน์ฑ๋ค์ด ์กด์ฌํฉ๋๋ค.
์ ์ด๊ถ์ ์ ๋ฌ :
ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC)๋ Q์ ์ง์ ํ ๋, Q์ ๋ํ ์ฝ๋์ ์์์ฃผ์๋ก ์ค์ ๋ฉ๋๋ค.
๋ฆฌํดํ๋ ๊ฒฝ์ฐ P์์ Q๋ฅผ ํธ์ถํ ํ ์งํ๋์ค์ผ ํ ๋ค์ ์ธ์คํธ๋ญ์ ์ผ๋ก ์ค์ ๋์ด์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ ์ ๋ฌ:
P๋ ์ฌ๋ฌ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ Q์ ์ ๊ณตํ ์ ์์ด์ผ ํฉ๋๋ค.
Q๋ P์๊ฒ ํ๋์ ๊ฐ์ ๋ฆฌํดํ ์ ์์ด์ผ ํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ๋ฐ๋ฉ:
Q๋ ์์ํ ๋ ์ง์ญ๋ณ์๋ค์ ์ํ ๊ณต๊ฐ์ ํ ๋นํ ์๋ ์๊ณ ,
๋ฆฌํดํ ๋ ํ ๋น๋ ๊ณต๊ฐ์ ๋ฐ๋ฉํ์ฌ์ผ ํฉ๋๋ค.
๐ง ๋ฐํ์ ์คํ
C์ธ์ด๋ฅผ ํฌํจํ ๋ถ๋ถ์ ์ธ์ด์์์ ํ๋ก์์ ํธ์ถ ๋์๋ฐฉ์์ ์ฃผ์ ํน์ง์, ์คํ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ ๊ณตํ๋ ํ์ ์ ์ถ(LIFO) ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์์ ํ์ฉํ ์ ์๋ค๋ ์ ์ ๋๋ค.
Q๊ฐ ์คํ๋๋ ๋์์๋ ์์ ์ ์ง์ญ๋ณ์๋ฅผ ์ํ ์๋ก์ด ์ ์ฅ๊ณต๊ฐ์ ํ ๋นํ ์ ์๋ ๋ฅ๋ ฅ์ด๋,
๋ค๋ฅธ ํ๋ก์์ ๋ก์ ํธ์ถ์ ์ค์ ํ๋ ๋ฅ๋ ฅ๋ง์ ํ์๋ก ํฉ๋๋ค.
๋ํ Q๊ฐ ๋ฆฌํด๋๋ ๊ฒฝ์ฐ์๋ ์์ ์ด ํ ๋น๋ฐ์ ๋ก์ปฌ ์ ์ฅ์ฅ์๋ฅผ ๋ฐ๋ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ์ ์คํ์ ์ฌ์ฉํด์ ํ๋ก์์ ๋ค์ด ์๊ตฌํ๋ ์ ์ฅ์ฅ์๋ฅผ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ,
์ฌ๊ธฐ์ ์คํ๊ณผ ํ๋ก๊ทธ๋จ ๋ ์ง์คํฐ๋ค์ ์ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ๊ทธ๋ฆฌ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ธฐ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
โญ๏ธ ์คํ์ ๊ตฌ์กฐ
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์คํ์ ์์ ์ฃผ์ ๋ฐฉํฅ์ผ๋ก ์ฑ์ฅํฉ๋๋ค.
์คํ ํฌ์ธํฐ %rsp๋ ๊ฐ์ฅ ์์ ์คํ ์ฃผ์(= ์คํ์ top)์ ๊ฐ๋ฆฌํต๋๋ค.
๋ฐ์ดํฐ๋ ์ด๊ณณ์์ ์ดํด๋ณด์๋ pushq์ popq ์ธ์คํธ๋ญ์ ์ ์ด์ฉํด์ ์คํ์ ์ ์ฅ๋๊ณ ์ฝ์ด์ฌ ์ ์์ต๋๋ค.
ํน์ ๊ฐ์ผ๋ก ์ด๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ํ ๊ณต๊ฐ์, ์คํ ํฌ์ธํฐ๋ฅผ ์ ๋นํ ๊ฐ์์ํค๋ ๊ฒ์ ํตํด ํ ๋นํ ์ ์์ต๋๋ค.
์ ์ฌํ๊ฒ ํ ๋น๋ฐ์ ๊ณต๊ฐ์ ์คํ ํฌ์ธํฐ๋ฅผ ๋จ์ํ ์ฆ๊ฐ์ํค๋ ๊ฒ๋ง์ผ๋ก๋ ๋ฐ๋ฉํ ์ ์์ต๋๋ค.
x86-64 ํ๋ก์์ ๊ฐ ๋ ์ง์คํฐ๋ค์ ์ ์ฅํ ์ ์๋ ๊ฐ์ ์ด์์ ์ ์ฅ๊ณต๊ฐ์ ํ์๋ก ํ๋ ๊ฒฝ์ฐ์๋ ์์ ๊ทธ๋ฆผ์ฒ๋ผ ์คํ์ ๊ณต๊ฐ์ ํ ๋นํฉ๋๋ค.
์ด ์์ญ์ ํด๋น ํ๋ก์์ ์ ์คํ ํ๋ ์(ํ์ฑํ ๋ ์ฝ๋)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
ํ์ฌ ํ๋ก์์ ์ ๋ํ ํ๋ ์์ ํญ์ ์คํ์ ๋งจ ์( = top, ๊ฐ์ฅ ๋ฎ์ ์ฃผ์(๋ฎ์ ๋ฐฉํฅ์ผ๋ก ์ฑ์ฅํ๋ฏ๋ก))์ ์์นํฉ๋๋ค.
๐ง ๋งค๊ฐ๋ณ์(๋ฐ์ดํฐ)์ ์ ๋ฌ
P์์ ํธ์ถ๋ Q์ ๋ํ ์ฝ๋๋, ํ์ฌ ์คํ ๊ฒฝ๊ณ๋ฅผ ํ์ฅํด์ ์์ ์ ์คํ ํ๋ ์์ ์ํ ๊ณต๊ฐ์ ํ ๋นํฉ๋๋ค.
์ด ๊ณต๊ฐ ๋ด์์ ๋ ์ง์คํฐ ๊ฐ๋ค์ ์ ์ฅํ๊ณ , ์ง์ญ๋ณ์๋ค์ ์ํ ๊ณต๊ฐ์ ํ ๋นํ๋ฉฐ, ์์ ์ด ํธ์ถํ๋ ํ๋ก์์ ๋ค์ ์ํ ์ธ์๋ค์ ์ค์ ํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ํ๋ก์์ ์ ์คํ ํ๋ ์๋ค์ ํ๋ก์์ ๊ฐ ์์๋ ๋ ํ ๋น๋๋ ๊ณ ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ผ๋ถ ํ๋ก์์ ๋ ๊ฐ๋ณํฌ๊ธฐ ํ๋ ์์ ํ์๋ก ํ๋๋ฐ, ์ด์ ๊ด๋ จํด์๋ ์ดํ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
ํ๋ก์์ P๋ ์ต๋ ์ฌ์ฏ ๊ฐ์ ์ธ์๋ค์ ๋ ์ง์คํฐ๋ก ์ ์กํ ์ ์์ง๋ง, ๋ง์ผ Q๊ฐ ๋ ๋ง์ ์ธ์๋ฅผ ์๊ตฌํ๋ค๋ฉด
P๋ Q๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ์์ ์ ์คํ ํ๋ ์ ๋ด๋ถ(๋ฆฌํด ์ฃผ์ ๋ฐ๋ก ์๋ถ๋ถ)์ ์ธ์๋ค์ ์ ์ฅํ ํ Q๋ฅผ ํธ์ถํฉ๋๋ค.
์ ๋ฌ๋ ์ ์๋ 6๊ฐ์ ๋ ์ง์คํฐ๋ค์, ์ ๋ฌ๋๋ ๋ฐ์ดํฐ ํ์ ๋ฐ์ดํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ ์ง์คํฐ ์ด๋ฆ์ ์ด์ฉํด์ ์ ํด์ง ์์๋ก ์ด์ฉ๋ฉ๋๋ค.
์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํผ์ฐ์ฐ์ ํฌ๊ธฐ (bits) |
์ธ์ ๋ฒํธ | |||||
1 | 2 | 3 | 4 | 5 | 6 | |
64 | %rdi | %rsi | %rdx | %rcx | %r8 | %r9 |
32 | %edi | %esi | %edx | %ecx | %r8d | %r9d |
16 | %di | %si | %dx | %cx | %r8w | %r9w |
8 | %dil | %sil | %dl | %cl | %r8b | %r9b |
๐ง ์ ์ด์ ์ด๋ - call ๊ณผ ret
โญ๏ธ call
์ ์ด๋ฅผ ํจ์ P์์ Q๋ก ์ ๋ฌํ๋ ๊ฒ์ ๋จ์ํ ํ๋ก๊ทธ๋จ ์นด์ดํฐ๋ฅผ Q์ ์์ ์ธ์คํธ๋ญ์ ์ผ๋ก ์ค์ ํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ฉ๋๋ค.
์ดํ Q๊ฐ ๋ฆฌํดํด์ผ ํ ๋๊ฐ ์ค๋ฉด ํ๋ก์ธ์(CPU)๋ P์ ์คํ์ ๋ค์ ์์ํด์ผ ํ๋ ์ฝ๋ ์์น์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
ํด๋น ์ ๋ณด๋ x86-64 ๊ธฐ๊ณ์์๋ call Q ์ธ์คํธ๋ญ์ ์ ์ฌ์ฉํ์ฌ Q๋ฅผ ํธ์ถํ๋ ๋์์ ๋ฆฌํด ์ฃผ์๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
ํด๋น ์ธ์คํธ๋ญ์ ์ return address A๋ฅผ ์คํ์ pushํ ๋ค, PC๋ฅผ Q์ ์์ ์ธ์คํธ๋ญ์ ์ ์ฃผ์๋ก ์ค์ ํฉ๋๋ค.
์ด๋ return address๋ P์์ call ๋ฐ๋ก ๋ค์์ ์กด์ฌํ๋ ์ธ์คํธ๋ญ์ ์ ์ฃผ์๋ก ๊ณ์ฐ๋ฉ๋๋ค.
call ์ธ์คํธ๋ญ์ ์ ํธ์ถ๋ ํ๋ก์์ ๊ฐ ์์ํ๋ ์ธ์คํธ๋ญ์ ์ ์ฃผ์๋ฅผ ๋ชฉ์ ์ง๋ก ๊ฐ์ต๋๋ค.
์ ํ์ ์ ์ฌํ๊ฒ ์ธ์คํธ๋ญ์ ์ ์ง์ ์ ํ ํน์ ๊ฐ์ ์ ํ ํํ๋ฅผ ๊ฐ์ง๋๋ค.
์ด์ ๋ธ๋ฆฌ ์ฝ๋์์ ์ง์ ์ ํ์ ๋ชฉ์ ๋๋ ๋ ์ด๋ธ๋ก ์ฃผ์ด์ง๋ ๋ฐ๋ฉด์,
๊ฐ์ ์ ํ์ ๋ชฉ์ ์ง๋ *์ ์ฃผ์์ง์ ํ์์ ํตํด ์ค์ ๋ฉ๋๋ค.
โญ๏ธ ret
call์ ๋์ํ๋ ์ธ์คํธ๋ญ์ ret ์ ์ฃผ์ A๋ฅผ ์คํ์์ popํ ๋ค, PC๋ฅผ A๋ก ์ธํ ํฉ๋๋ค.
๐ง ๋ ์ง์คํฐ ๋ณด๊ด ๊ด์ต
ํ๋ก๊ทธ๋จ ๋ ์ง์คํฐ๋ค์ ๋ชจ๋ ํ๋ก์์ ๋ค์ด ๊ณต์ ํ๋ ๋จ์ผ ์์์ ์ญํ ์ ํฉ๋๋ค.
๋น๋ก ํ๋์ ์๊ฐ์์ ํ๋์ ํ๋ก์์ ๋ง์ด ํ์ฑํ๋ ์ ์์ง๋ง,
ํ๋์ ํ๋ก์์ (ํธ์ถ์, Caller)๊ฐ ๋ค๋ฅธ ํ๋ก์์ (ํผํธ์ถ์, Callee)๋ฅผ ํธ์ถํ ๋,
ํผํธ์ถ์๋ ํธ์ถ์๊ฐ ๋์ค์ ์ฌ์ฉํ์ฌ์ผ ํ ์ผ๋ถ ๋ ์ง์คํฐ ๊ฐ์ ๋ฎ์ด์ฐ๋ฉด ์๋ฉ๋๋ค.
์ด ๋๋ฌธ์ x86-64๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ํ๋ก์์ ๋ค์ ํฌํจํ ๋ชจ๋ ํ๋ก์์ ๋ค์ด ์ค์ํด์ผ ํ ํต์ผ๋ ์ผ๋ จ์ ๋ ์ง์คํฐ ์ฌ์ฉ๊ด์ต์ ์ฒดํํ๊ณ ์์ต๋๋ค.
โญ๏ธ ํธ์ถ์ ๋ณด๊ด ๋ ์ง์คํฐ (Caller Saved)
๋ ์ง์คํฐ %rax, %rdi,%rsi, %rdx, %rcx, %r8, %r9, %r10, %r11์ ํธ์ถ์ ๋ณด๊ด ๋ ์ง์คํฐ๋ก ๊ตฌ๋ถํฉ๋๋ค.
์ด๋ค์ ํผํธ์ถ์์ ์ํด ๋ณ๊ฒฝ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๋ฐ๋ผ์ ํธ์ถ์์์ ์ ๋ ์ง์คํฐ๋ค์ ํ๋ก์์ ํธ์ถ ํ์๋ ๊ณ์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด, ํธ์ถ์์์ ํด๋น ๋ ์ง์คํฐ๋ค์ ๋ณด๊ดํ ์ ํ๋ก์์ ๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
โญ๏ธ ํผํธ์ถ์ ์ ์ฅ ๋ ์ง์คํฐ (Callee Saved)
๋ ์ง์คํฐ %rbx, %rbp, %r12 - %r15๋ ํผํธ์ถ์ ์ ์ฅ ๋ ์ง์คํฐ๋ก ๊ตฌ๋ถํฉ๋๋ค.
ํ๋ก์์ P๊ฐ Q๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ,
Q๊ฐ ๋ฆฌํด๋๋ ์๊ฐ์ ํด๋น ๋ ์ง์คํฐ๋ค์ ๊ฐ๋ค์ Q๊ฐ ํธ์ถ๋์์๋์ ๊ฐ๋ค๊ณผ ๋์ผํ๊ฒ ๋ณด์ฅํด์ฃผ์ด์ผ ํฉ๋๋ค.
ํ๋ก์์ Q๋ ์ด๋ฌํ ๋ ์ง์คํฐ๋ค์ ๊ฐ๋ค์ ์ ๋ ๋ณ๊ฒฝํ์ง ์๊ฑฐ๋,
๋ด๋ถ์์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ ์คํ์ ํธ์ํด๋ ํ ์ด ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ ๋ค ๋ฆฌํด ์ ์ ์คํ์์ ์ด์ ๊ฐ์ ํํด์ค๋ ๋ฐฉ์์ผ๋ก ๋ ์ง์คํฐ๋ฅผ ๋ณด์กดํฉ๋๋ค.
โญ๏ธ ์คํ ํฌ์ธํฐ ๋ ์ง์คํฐ (%rsp)
ํญ์ ์คํ์ top์ ๊ฐ๋ฆฌํค๋ ์ผ์ข ์ ํผํธ์ถ์ ์ ์ฅ ํํ์ ๋ ์ง์คํฐ์ ๋๋ค.
ํ๋ก์์ ๋ฆฌํด ์์ ์๋๊ฐ์ผ๋ก ๋ณต์๋ฉ๋๋ค.
'๐ฅ Computer Science > ์์คํ ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ๋ฒํผ ์ค๋ฒํ๋ก์ฐ (0) | 2022.10.25 |
---|---|
[์์คํ ํ๋ก๊ทธ๋๋ฐ] 2022 BombLab(๋ฐค๋ฉ) ์์ธ๋ถ์ (0) | 2022.10.24 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ด์ ๋ธ๋ฆฌ์ด[3] - ๋ฐ๋ณต๋ฌธ (0) | 2022.10.13 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ด์ ๋ธ๋ฆฌ์ด[2] - ์กฐ๊ฑด๋ฌธ (2) | 2022.10.12 |
[์์คํ ํ๋ก๊ทธ๋๋ฐ] ์ด์ ๋ธ๋ฆฌ์ด [1] (2) | 2022.10.10 |