์ด์ ๋ธ๋ฌ, gccํ๊ฒฝ ๊ตฌ์ฑํ๊ธฐ
- -
์ค๋์ c์ธ์ด์ ์ด์ ๋ธ๋ฆฌ๋ฅผ ํฉ์ณ์ ์ฌ์ฉํ์ฌ ๋ก๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์ด ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ํ๊ฒฝ์ ๊ตฌ์ฑํด๋ณด๊ฒ ์ต๋๋ค.
SASM์ GUIํ๊ฒฝ์์ด ์ด์ ๋ธ๋ฆฌ ์ธ์ด ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ํด์๋ nasm.exe(์ด์ ๋ธ๋ฌ)์
gcc.exe(๋ง์ปค) ์คํํ๊ฒฝ์ด ํ์ํ๋ค. ์ด๋ฐ ํ๊ฒฝ์ ๋ช ๋ น ์ฐฝ ํ๊ฒฝ์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ ์ค์ ์ ๋ฐ๋ก ํด์ค ํ์๊ฐ ์๋ค.
๋จผ์ gccํ๊ฒฝ ์ค์ ์ ํด์ค ํ, ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ๊ณต๊ฐ์ ๋ฃ์ด nasm๊ณผ ํจ๊ป ๋์๋ค.
sasm์์๋ io.inc/io64.inc ๋งคํฌ๋ก ํจ์๋ค์ ๋์์ผ๋ก ์ ์ถ๋ ฅ ๋ฑ์ ์ํํ๋ฏ๋ก,
๋ง์ฝ ์ด๋ฌํ ๋งคํฌ๋ก ํจ์์ ๋์์ ๋ฐ์ง ์๊ณ ์ฝ๋ฉํ๋ค๋ฉด ์ฝ๋ฉ ํ๋ ์์ํฌ๋ ์๋์ฒ๋ผ ์คํ ํด์ผํ๋ค.
๊ธฐ์กด์ sasm ์ผ๋ก์ ์ฝ๋ฉ
๋ณ๊ฒฝ๋ ์๋ก์ด ํ์์ ์ฝ๋ฉ ํ๋ ์์ํฌ
์ฆ CMAIN์ด _main์ผ๋ก ๋ณ๊ฒฝ๋๋ค. section์ segment๋ผ๋ ์ง์์ด๋ก ์ฌ์ฉํด๋ ์๊ด์ ์๋ค.
๋ช ๋ น์ฐฝ ํ๊ฒฝ(cmd)์์ ์ด์ ๋ธ๋ฆฌ ์์ค๋ฅผ ๊ฐ์ง๊ณ ์คํ ํ์ผ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
์์ค ํ์ผ์ ์ด์ ๋ธ๋ฌ(nasm.exe)์ ์ํด ์ค๊ฐํ์ผ๋ก ๋ง๋ค์ด์ง๊ณ ,
์ด ์ค๊ฐํ์ผ์ ์ด์ฉํด์ ๋ง์ปค(gcc.exe)๋ ์ต์ข ์คํ ํ์ผ์ ๋ง๋ค๊ฒ ๋จ
test.asm(์์คํ์ผ)--->nasm.exe(์ด์ ๋ธ๋ฌ) ๋ฅผ ํตํด ---> test.obj(์ค๊ฐํ์ผ)๋ก ๋ณ๊ฒฝ๋จ ---->์ด๊ฒ์ gcc.exe(๋ง์ปค)๊ฐ --> test.exe(์คํํ์ผ๋ก ๋ง๋ค์ด์ค)
์ด๋ฐ ์์์ธ ๊ฒ์ด๋ค.
์๋๋ ํ์ผ์ ๋ง๋๋ ๋ช ๋ น์ด์ด๋ค.
์ด์ ๋ธ(์ค๊ฐํ์ผ ๋ง๋ค๊ธฐ)
- nasm.exe -g -f win32 <์์ค์ด๋ฆ> -o <์ค๊ฐํ์ผ ์ด๋ฆ>
- nasm.exe -g -f win64 <์์ค์ด๋ฆ> -o <์ค๊ฐํ์ผ ์ด๋ฆ>
๋งํน(์คํํ์ผ ๋ง๋ค๊ธฐ)
- gcc.exe <์ค๊ฐํ์ผ์ด๋ฆ> -g -o <์คํํ์ผ ์ด๋ฆ> -m32
- gcc.exe <์ค๊ฐํ์ผ์ด๋ฆ> -g -o <์คํํ์ผ ์ด๋ฆ> -m64
**์ฐธ๊ณ ๋ก c์ธ์ด๋ ์์ฒ๋ผ exeํ์ผ๋ก ๋ง๋ค ์ ์์ง๋ง
์ด์ ์์ค์ ์์ผ ๋๋(nasm์์ ์๋ macro.oํ์ผ์ ํจ๊ป ์จ์ ๋งํน ํด์ฃผ์ด์ผ ํฉ๋๋ค.
-gcc a.obj macro.o b.o -g -o haeun -m32
--> ์ฆ a.asm ์ ์ค๊ฐํ์ผ๋ก ๋ง๋ a.obj์
macro.o ํ์ผ ๊ทธ๋ฆฌ๊ณ b.o(b.c๋ฅผ b.o๋ก ์ค๊ฐํ์ผ๋ง๋ ๊ฒ)
๋ฅผ haeun ์ด๋ผ๋ ์คํํ์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒ ์ ๋๋ค. **
-g : ๋๋ฒ๊น ์ ๋ณด ํฌํจ
-f : ์ถ๋ ฅํ์ผ ํฌ๋ฉง
-o ์ถ๋ ฅํ์ผ ์ด๋ฆ
NASM์์ 2๊ฐ ์ด์์ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ด์ ๋ธ๋ฆฌ ํ๋ก๊ทธ๋๋ฐ์ ํด์ผํ๋ ๊ฒฝ์ฐ
-> ๋์ผํ ๋ชจ๋ ๋ด๋ถ์ ์๋ ํ๋ก์์ ๋ ํน๋ณํ ์กฐ์น ์์ด ์ฌ์ฉ ๊ฐ๋ฅ
-> ๋ค๋ฅธ ๋ชจ๋์ ์๋ ํ๋ก์์ ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด ์ค์ ์ด ํ์ํจ
ํ๋ก์์ ๋?
ํน์ ์์ ์ ์ํ ํ๋, ์ด๋ฆ์ด ์๋ PL/SQL BLOCK ์ด๋ค.
๋งค๊ฐ ๋ณ์๋ฅผ ๋ฐ์ ์ ์๊ณ , ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ BLOCK ์ด๋ค.
ํ๋ก์์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ชจ๋ ,๋ชจ๋์ ์ ์ผ ์์ชฝ์ extern ์ง์์ด๋ฅผ ์ฌ์ฉํด์ ์๋น์ค๋ฐ์ผ๋ ค ํ๋ ํ๋ก์์ ์ ์ด๋ฆ์ด
์ธ๋ถ ๋ชจ๋ ์ด๋๊ฐ์ ์๋ค๋ ๊ฒ์ ์ ์ธ
ex) test.asm ์์ extern myadd ๋ฅผ ์ ์ธํด์ค.
๋ฑ...์ด๋ ๊ฒ ์ ์ธํด์ฃผ๋ ๊ฒ์
io.inc/io64.incํ์ผ์ sasm์ด ์ค์น๋ ํด๋์์ include์๋ธ ํด๋์์ ๋ฐ๊ฒฌํ ์ ์๋ค.
https://dman95.github.io/SASM/
์ ์ฃผ์์์ ๋ค์ด๋ฐ์ผ๋ฉด sasm ์์ nasm ๋ค ์ค๋น๋์ด ์์ผ๋ ๊ฐํธํ ๋ฏํ๋ค
sasm > nasm ํด๋ >macro.o, macro64.o ํ์ผ๋ก ์กด์ฌํจ
์ฆ ์ 4๊ฐ ํ์ผ๋ค์ ์์ ํด๋๋ก ๋ณต์ฌํ๋ฉด ์ค๋น๊ฐ ๋๋๋ค.
(nasm ์์ ๋๊ฐ, include์์ ๋ ๊ฐ)
์ด๋ ๊ฒ ๊ฐ์ ๊ฒฝ๋ก๋ก ๋์ค๋ค.
์ด๊ฒ์ผ๋ก %include "io.inc"๋ฅผ ํฌํจํ๊ณ ํ์ํ ํจ์ PRINT_DEC๊ฐ์ ํจ์๋ฅผ ์ฝ๋ฉ ํ ์ ์๋ค.
๋ํ CMAIN , _main ๋ชจ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
C์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ ์ฌ์ฉํ๊ธฐ
c์ ํจ์๋ค์ ์ค๊ฐํ์ผ ํํ(๋ณดํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ผ๊ณ ํจ)๋ก ๊ตฌํ๋์ด์์ด์
์ฐ๋ฆฌ๊ฐ C๋ก ๋ง๋ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ๋, ๋งํน์ด ์ผ์ด๋๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ C์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ๋น์ฐํ ์ด์ ๋ธ๋ฆฌ ์ธ์ด์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
sasmํ๊ฒฝ์์ c์ ๋ผ์ด๋ธํ์ผ์ sasm > mingw(32bit) ์ ์๋ธํด๋ ์์ ์กด์ฌํ๊ณ ์๋ค.
(์ ๊ฐ์๊ฒฝ์ฐ mingw > lib > gcc > mingw32 > 4.6.2์ ์กด์ฌํ์ด์)
์ด์ ์์ C์ printf()ํจ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด(32bit ๋ชจ๋ ๊ธฐ์ค)
๋ฐ๋์ ์๋์ ๊ฐ์ ์์ค์ฝ๋ ์ฝ๋ฉ์ ๋ํด ์์งํด์ผํ๋ค.
extern _printf ; ์ธ๋ถ ํจ์ ์กด์ฌ ์ ์ธ(ํจ์ ์ด๋ฆ ์์ _๋ฅผ ๋ฐ๋์ ๋ถ์ฌ์ผํจ)
push parameter; ํจ์ ํ๋ผ๋ฏธํฐ ์ค์
call _printf ; ํจ์ ํธ์ถ
add esp, ํ๋ผ๋ฏธํฐ ํฌ๊ธฐ; ์คํ๋ณต๊ตฌ
C๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ์ฌ ๋งํน ์ํํ ๋๋
ํ๋ก๊ทธ๋๋จธ๊ฐ C์ ์ค๊ฐํ์ผ๋ช ์ ์๋์ผ๋ก ์๋ ค์ฃผ์ง ์๊ณ , gcc ์ค์น ์
์ค์ ๋ ํ๊ฒฝ์ ๋ฐ๋ผ gcc.exe๊ฐ ๋ฌต์์ ์ผ๋ก ํ์ํ ์์๋ค์ ๋งํฌํ๋ค.
์ค๊ฐํ์ผ์ ํ์ฅ์๋ ๋ฌด์์ด๋ ์๋ฌด ์๊ด์ด ์์ง๋ง ์์ฃผ ์ฐ๋ ํ์ฅ์๋ obj, o, a, lib ๋ฑ์ด ์๋ค.
+++
c์ธ์ด๋ผ๋ฉด printf("hello \n");
์ด์ ๋ธ์ ๊ฒฝ์ฐ 'hello' ,13,10,0 ์ด๋ ๊ฒ ์
์ ๊ทธ๋ฌ๋ ์์๋ดค๋๋ฐ
13์ CR ASCII ์ฝ๋ (์บ๋ฆฌ์ง ๋ฆฌํด)์ 10์ง์ ๊ฐ์ด๊ณ 10์ LF ASCII ์ฝ๋
(์ค ๋ฐ๊ฟ)์ 10์ง์ ๊ฐ์ด๋ฉฐ 0์ ๋ฌธ์์ด์ ์ข ๋ฃ 0 ๋ผ๊ณ ํฉ๋๋ค!
โป๊ทธ ์ ์ ์๊ณ ๊ฐ ์ง์
1. ์คํ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์๋ก ์ฑ์ฅํจ.
๋ฐ๋ผ์ ์คํ์ ์ฌ์ฉํ๋ฉด ์ฃผ์์ ๋บ์ ์ฐ์ฐ์ด ์ผ์ด๋๊ณ , ์คํ์ ๋ณต์ํ๋ฉด ์ฃผ์์ ๋ง์ ์ฐ์ฐ์ด ์ผ์ด๋๋ค.
2. C์ ํ๋ผ๋ฏธํฐ ํธ์ถ ๋ฐฉ๋ฒ์ ์คํ์ ํ๋ผ๋ฏธํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ
ํจ์์์ ์ด๊ฒ์ ์ฌ์ฉํ๋ค๋ ์ . Cํจ์ ๋ด๋ถ์์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํ๊ธฐ๋ ํ์ง๋ง
์คํ์ ๋ณต์์ ๊ด์ฌํ์ง ์๋๋ค. ์ฆ ํธ์ถํ ์ชฝ์์ ๋ฐ๊ฟ์ ํด์ผํ๋ค.
io.inc ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ extern _printf๋ฅผ ์ ์ธํ ํ์๊ฐ ์์ผ๋ฉฐ _print ๋๋ printf ๋ผ๊ณ ํธ์ถํด๋
์ ์์ ์ผ๋ก ๋์ํ๋๋ฐ, ์ด์ ๋ io.inc ํ์ผ ๋ด๋ถ์ _printf๊ฐ printf๋ก ์ฌ์ ์ ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฌผ๋ก ๋ชจ๋ Cํจ์๊ฐ ์ ์๋ ๊ฒ์ ์๋์ง๋ง ์์ฃผ ์ฐ๋ ํจ์๋ค์ ๋๋ถ๋ถ ์ ์๋์ด์๋ค.
C๋ก ์ฌ์ฉ์ ์ ์ ๋ชจ๋ ๋ง๋ค๊ณ ์ด์ ๋ธ๋ฆฌ ์ธ์ด์์ ์ด ์๋ธ๋ชจ๋์ ์ด์ฉํ๊ธฐ
์ด๋ค ๋ก์ง๋ค์ ์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ก ๊ตฌํํ๊ธฐ์ ๋๋ฌด๋ ๋ณต์กํ๊ณ ์ฝ๋ฉ๋์ด ๋ง์ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค.
์ด๋ฐ ์ด์ ๋๋ฌธ์ C์ธ์ด๊ฐ์ ๊ณ ๊ธ ์ธ์ด๊ฐ ๋ฑ์ฅ ํ์๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ๋ก์ง์ ์ ๊ธ์ธ์ด์ธ ์ด์ ๋ธ๋ฆฌ ์ธ์ด์์ ์ฌ์ฉ ํ ์๊ฐ ์๋๋ฐ
์ฃผ์ํด์ผ ํ ์ ์ ์ค์ ๋ก ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์์ ์ด๋ฐ๊ฒฝ์ฐ๋ ๊ฑฐ์ ๋ฐ์ํ์ง ์๋๋ค๊ณ ํ๋ค.
ํ์ง๋ง ๊ฐ ์ธ์ด๋ค์ ์ํธ๊ด๊ณ ๋ฐ ๊ทธ ๋ด๋ฉด์ ๋ค์ฌ๋ค๋ณผ ์ ์๋ ๊ธฐํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด๊ณณ์์ ๋ค๋ฃจ์๋ค.
1. C์์ ํจ์ ๋ฆฌํด ๊ฐ์ eax๋ ์ง์คํฐ์ ์ ์ฅ๋๋ค
๋ฐ๋ผ์ ์ด์ ๋ธ๋ฆฌ ์ธ์ด ์ชฝ์์ ๋ฆฌํด๊ฐ์ EAX๋ ์ง์คํฐ๋ฅผ ์ฝ์ผ๋ฉด ๋๋ค
2. 32bit๋ชจ๋ ์คํํ์ผ์์ C์ int๋ 32bit (4byte)๋ก ์ฒ๋ฆฌ๋๋ค
3. ํ๋ผ๋ฏธํฐ๋ ์คํ์ผ๋ก ์ ๋ฌ๋๋ฉฐ C์ธ์ด์ ํจ์ ํธ์ถ์์ ๋ค์ชฝ์ ๋์ค๋ ํ๋ผ๋ฏธํฐ๋ถํฐ ์คํ์ ์ ๋ฌ๋๋ค
๋ฐฐ์นํ์ผ ๋ด์ฉ
๊ฒฝ๋ก๋ฅผ ๋ํ๋ด์ฃผ๋ฉด ๋๋ค. (gcc,nasm์์น)
'Languages > Assembly' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์ ๋ธ๋ฆฌ์ด] ๋ก๋ ์์ฑํ๊ธฐ (0) | 2020.09.10 |
---|---|
[์ด์ ๋ธ๋ฆฌ์ด] ์ฌ์น์ฐ์ฐ ๊ณ์ฐ๊ธฐ (2) | 2020.04.20 |
[์ด์ ๋ธ๋ฆฌ์ด] ๋ ์ง์คํฐ (1) | 2020.04.20 |
[์ด์ ๋ธ๋ฆฌ์ด] ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๋ฌผ๋ฆฌ์ ๋ชจ์ต (2) | 2020.04.11 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค