일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- sib
- 운영체제
- instruction
- GCC
- csproj
- assembly
- 어셈블리
- movaps
- C
- OS
- C#
- call instruction
- return
- void main
- effective address
- WPF
- struct반환
- movups
- disassemble
- movdqu
- modrm
- 유효 주소
- modr/m
- compare
- stackalign
- 숏코딩
- NASM
- load effective address
- C언어
- struct
- Today
- Total
프로그래밍 잡화점
0 - 1. 기본적인 Assembly 개념 - 레지스터 본문
어셈블리를 통한 C 컴파일러의 해석 구조를 알아보자.
기본적인 분석을 위해 알아야 할 기본 지식들을 알아보고 가보자.
들어가기 앞서 문법은 nasm, intel을 사용하며, arm은 다루지 않을 예정입니다.
(arm은 intel이랑 문법이 다르며 구조도 좀 달라 intel과 함께 포스팅하기 어렵습니다)
레지스터란?
아주 작은 메모리 공간인데, cpu와 붙어 있어 매우 빠른 속도로 동작이 가능하다.
레지스터의 종류는 이 블로그를 참고해보자
범용 레지스터
주로 값 이동과 반환 값을 갖는 레지스터(AX, BX, CX, DX)는 특이한 성질이 있다
AL, AH, AX, EAX, RAX로 5가지 종류가 존재하는데
이들은 각각 큰 레지스터를 공유하여 사용한다.
- AL과 AH는 각각 8비트, 즉 1바이트의 크기이다
- AL:AH로 표기하며 이 둘을 이어 붙인 공간으로 AX(16비트 = 2바이트)와 크기가 같다
- EAX는 32비트, 즉 4바이트의 크기이다.
- RAX는 64비트, 즉 8바이트의 크기이다.
- AL값이 1로 셋팅되면 EAX의 하위 1바이트도 1로 셋팅되는 셈이다.
- 그러나 AL의 값을 바꾼다고 EAX의 나머지 비트가 초기화 되는 것은 아니다.
예를 들어 EAX가 다음과 같을때
eax = 0110 0000 1010 1101 1111 1100 0001 0001
AL를 1로 설정하게 되면
al = 0000 0001
AL 부분에 해당하는 부분만 변경된다
eax = 0110 0000 1010 1101 1111 1100 0000 0001
RAX의 경우 32비트 운영체제에선 사용할 수 없다. (32bit로 컴파일 하는 경우도 해당)
이는 32비트 cpu가 rax 레지스터를 포함하지 않아서이다.
이와 동일하게 16비트 컴퓨터에는 eax가 없는데 대부분의 컴퓨터는 32비트/64비트 cpu를 사용하는 경우가 많으므로 rax의 사용 여부만 확인하여도 충분하다.
(* 보통 32bit는 앞에 붙는 e는 extended를 의미하고, 64bit는 앞에 붙는 r은 register를 의미한다.)
그 다음으로 알아볼 것은 포인터 레지스터이다.
포인터 레지스터에는 3종류가 존재한다.
- (e/r)sp는 stack pointer의 약자로 스택의 끝을 가리키는 레지스터이다.
- (e/r)bp는 base pointer의 약자로 스택의 시작점을 가리키는 레지스터이다.
- (e/r)ip는 다음 실행 명령어를 기록하는 포인터이다. 이 포인터의 값을 변경하여 label 없이 jmp를 할 수 있게 된다.
플래그 레지스터
연산 결과에 따라 바뀌는 레지스터이다. 위에 글을 읽어보고 자세한건 후에 cmp와 jmp 명령어에 관련해 설명할 때 자세히 설명할 것이다.
다음 포스팅에선 기본 명령어를 알아볼려고 한다.
'Assembly' 카테고리의 다른 글
0 - 4 기본적인 Assembly 개념 - 문법과 instruction Part 3 (0) | 2023.08.24 |
---|---|
어셈블리와 기계어에 관해서 (0) | 2023.06.10 |
0 - 3 기본적인 Assembly 개념 - 문법과 instruction Part 2 (0) | 2023.04.13 |
SIMD in Assembly (2) | 2023.04.10 |
0 - 2 기본적인 Assembly 개념 - 문법과 instruction Part 1 (0) | 2022.09.29 |