์ด์ ๋ธ๋ฆฌ ํจ์ํธ์ถ๊ท์ฝ
ํจ์๋ฅผ ํธ์ถํ ๋ ์ผ์ ํ ๊ท์น์ด ์๋๋ฐ ์ด๋ฅผ ํจ์ํธ์ถ๊ท์ฝ ์ด๋ผ๊ณ ํ๋ค
__cdecl, __stdcall, __fastcall ์ด ์ธ๊ฐ์ง๊ฐ ๋ํ์ ์ด๋ค.
1. __cdecl (C์ธ์ด์์ ๋ง๋ ํจ์ ํธ์ถ๊ท์ฝ)
ํ๋ผ๋ฏธํฐ ์ ๋ฌ : ์ผ์ชฝ <--- ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ์คํ ํ๋ ์์ ์ด์ฉํ์ฌ ํ๋ฆฌ๋ฏธํฐ๋ฅผ ์ ๋ฌํ๋ค(๊ฐ์ ์ ํ X)
ํจ์ ๋ฆฌํด๊ฐ ์ ๋ฌ : 4byte ์ดํ๋ฉด EAX, ์ด์์ด๋ฉด EDX, EAX์ ์ ํ์ ๋ฐ์ดํธ๋ฅผ ๋๋์ด ์ ์ฅ
์คํ ์ ๋ฆฌ๋ฐฉ๋ฒ: ํธ์ถํ ํจ์๊ฐ ํธ์ถ๋ํจ์์ stack frame ์ ์ ๋ฆฌ
ex> add esp, (์ ์ฒด ์คํ ํฌ๊ธฐ)
++ cdecl์์๋ ๊ฐ๋ณ์ธ์ ํจ์๊ฐ ์กด์ฌํ๊ณ ํ๋ผ๋ฏธํฐ ๊ฐ์์ ํ์ด ์๊ธฐ ๋๋ฌธ์
ํจ์ ํธ์ถ์๊ฐ stack frame์ ์ ๋ฆฌํ๋ค
2. __stdcall (์๋์ฐ์์ ์ฌ์ฉํ๊ณ ์๋ ํจ์ ํธ์ถ๊ท์ฝ -winAPI๊ฐ ์ฌ์ฉ)
ํ๋ผ๋ฏธํฐ ์ ๋ฌ: ์ผ์ชฝ <--- ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ์คํ ํ๋ ์์ ์ด์ฉํ์ฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํจ
ํจ์ ๋ฆฌํด๊ฐ ์ ๋ฌ : __cdecl๊ณผ ๋์ผ
์คํ ์ ๋ฆฌ๋ฐฉ๋ฒ : ํธ์ถ๋ ํจ์๊ฐ ์์ ์ stack frame์ ์ ๋ฆฌ
ex> ret
3. __fastcall (์ฑ๋ฅ์ ๊ทน๋ํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ ํจ์)
ํ๋ผ๋ฏธํฐ ์ ๋ฌ: ์ผ์ชฝ <--- ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ECX, EDX์ ์คํ์ ์ด์ฉ
๋๋จธ์ง๋ stdcall๊ณผ ๋์ผ