1. ์ด์ ๋ธ๋ฌ
-
์ด์ ๋ธ๋ฌ๋ ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
-
Section ๊ตฌ๋ถ์ด ์๋ค.
- .data : ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
- ๋ณ์์ ์ ์ธ ๋ฐ ์ฌ์ฉ
- ์ด๊ธฐํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
- .text : ์ฝ๋๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
- .bss : ์ด๊ธฐํ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
- .data : ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
#include <iostream>
using namespace std;
char str[] = {'1','2','3','4','5'}; // .data ์์ญ์ ์ ์ฅ
int main() {
char str2[] = {'1','2','3','4','5'}; // stack ์์ญ์ ์ ์ฅ
cout << str << endl;
cout << str2 << endl;
return 0;
}
12345
12345๏ฟฝ%
str
์ ์ด๊ธฐํ๋ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ .data ์์ญ์ ์ ์ฅ๋๋ค.str2
๋ stack ์์ญ์ ์ ์ฅ๋ ๋ฌธ์ ๋ฐฐ์ด์ด๊ณ ์ฐ์ฐํ escape null์ ์ฐพ์๋๊น์ง ์ถ๋ ฅํ๋ค.
8๋นํธ : 1๋ฐ์ดํธ 16๋นํธ : 2๋ฐ์ดํธ: 1์๋ 32๋นํธ : 4๋ฐ์ดํธ: 1๋๋ธ์๋ 64๋นํธ : 8๋ฐ์ดํธ: 1์ฟผ๋์๋
- ๋ ์ง์คํฐ์ ํฌ๊ธฐ๋ ์ผ๋ฐ์ ์ผ๋ก 64๋นํธ ์ด์์ฒด์ ์์ 64๋นํธ ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ๋ค.(8๋ฐ์ดํธ)
- ์ข
๋ฅ๋ ์ด 16๊ฐ์ด๋ค.
- 64๋นํธ ๋ ์ง์คํฐ : RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14, R15
- 32๋นํธ ๋ ์ง์คํฐ : EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
- 16๋นํธ ๋ ์ง์คํฐ : AX, BX, CX, DX, SI, DI, BP, SP
- 8๋นํธ ๋ ์ง์คํฐ : AL, BL, CL, DL, SIL, DIL, BPL, SPL
1.1. ์ด์ ๋ธ๋ฆฌ์ด ๋ช ๋ น์ด
-
์ด์ ๋ธ๋ฆฌ์ด ๋ช ๋ น์ด๋ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋๋ ๋ช ๋ น์ด์ด๋ค.
-
์ด์ ๋ธ๋ฆฌ์ด ๋ช ๋ น์ด๋ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด์ 1:1 ๋์๋๋ค.
-
mov
: ๋ ์ง์คํฐ์ ๊ฐ์ ์ ์ฅํ๋ ๋ช ๋ น์ด -
add
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋ํ๋ ๋ช ๋ น์ด -
sub
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋นผ๋ ๋ช ๋ น์ด -
mul
: ๋ ์ง์คํฐ์ ๊ฐ์ ๊ณฑํ๋ ๋ช ๋ น์ด -
div
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋๋๋ ๋ช ๋ น์ด -
inc
: ๋ ์ง์คํฐ์ ๊ฐ์ 1 ์ฆ๊ฐ์ํค๋ ๋ช ๋ น์ด -
dec
: ๋ ์ง์คํฐ์ ๊ฐ์ 1 ๊ฐ์์ํค๋ ๋ช ๋ น์ด -
cmp
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ๋ ๋ช ๋ น์ด -
jmp
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ๋ ๋ช ๋ น์ด -
je
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ๋ ๋ช ๋ น์ด -
jne
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ๋ ๋ช ๋ น์ด -
jg
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ๋ ๋ช ๋ น์ด -
jge
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ๋ ๋ช ๋ น์ด -
jl
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ๋ ๋ช ๋ น์ด -
jle
: ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ตํ๋ ๋ช ๋ น์ด -
call
: ํจ์๋ฅผ ํธ์ถํ๋ ๋ช ๋ น์ด -
ret
: ํจ์๋ฅผ ์ข ๋ฃํ๋ ๋ช ๋ น์ด -
push
: ์คํ์ ๊ฐ์ ์ ์ฅํ๋ ๋ช ๋ น์ด -
pop
: ์คํ์ ๊ฐ์ ๊บผ๋ด๋ ๋ช ๋ น์ด -
lea
: ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ช ๋ น์ด -
and
: ๋ ผ๋ฆฌ๊ณฑ์ ํ๋ ๋ช ๋ น์ด -
or
: ๋ ผ๋ฆฌํฉ์ ํ๋ ๋ช ๋ น์ด -
xor
: ๋ฐฐํ์ ๋ ผ๋ฆฌํฉ์ ํ๋ ๋ช ๋ น์ด -
not
: ๋ ผ๋ฆฌ๋ถ์ ์ ํ๋ ๋ช ๋ น์ด -
shl
: ์ผ์ชฝ ์ํํธ๋ฅผ ํ๋ ๋ช ๋ น์ด -
shr
: ์ค๋ฅธ์ชฝ ์ํํธ๋ฅผ ํ๋ ๋ช ๋ น์ด -
nop
: ์๋ฌด๊ฒ๋ ํ์ง ์๋ ๋ช ๋ น์ด
db: Define Byte - ๋ฐ์ดํธ ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํฉ๋๋ค. dw: Define Word - ์๋(2๋ฐ์ดํธ) ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํฉ๋๋ค. dd: Define Doubleword - ๋๋ธ์๋(4๋ฐ์ดํธ) ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํฉ๋๋ค. dq: Define Quadword - ์ฟผ๋์๋(8๋ฐ์ดํธ) ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํฉ๋๋ค.