@ 09_레지스터 구조
1. 레지스터
"레지스터는 CPU의 기억 공간이다. '변수' 개념으로 이해하면 쉽다."
- 처리 중인 데이터나 처리 결과를 임시 보관하는 CPU 내의 기억 장치이다.
- CPU가 접근할 수 있는 메모리 중에 가장 빠르게 동작/접근하는 기억 장치이다.
- CPU가 여러가지 연산을 처리하는 동안 임시적으로 연산에 필요한 데이터를 보관하는 용도로 사용한다.
- 즉, 1 + 3 = 4 라는 연산을 실시할때, 1, 3, +, 결과값 4를 저장한다.
- 이때, 레지스터는 범용 레지스터 8개로 구성되어 있으며, 고유의 이름이 할당되어 있다.
[참고] 레지스터 크기별 이름
8bit AL
16bit AX
32bit EAX
64bit RAX
<------------------------ EAX ------------------------>
<---------- AX ---------->
|────────────|──AH──|──AL──|
31 15 7 0
2. 범용 레지스터
1) EAX(Extended Accumulator Register)
- 32bit로 구성된 레지스터이며, 16bit 환경에서 AX라고하며, 각각 8bit씩 AH와 AL로 구성된다.
- 산술 연산(덧셈/뺄셈/곱셈/나눗셈) 및 논리 연산 결과 값을 주로 저장한다. (무조건 EAX에만 저장하는 것은 아니다.)
- 즉, 1 + 3 = 4 라는 연산이 있다면, 주로 결과값 '4'가 저장된다. (무조건은 아니다.)
- 함수의 리턴값이 저장되는 레지스터이며, 이를 통해서 함수 성공/실패 여부를 판단할 수 있다.
2) EDX(Extended Data Register)
- 32bit로 구성된 레지스터이며, 16bit 환경에서 DX라고하며, 각각 8bit씩 DH와 DL로 구성된다.
- 산술 연산(덧셈/뺄셈/곱셈/나눗셈) 및 논리 연산 결과 값을 주로 저장한다. (무조건 EAX에만 저장하는 것은 아니다.)
- 연산 결과 값이 32bit를 초과할 경우, EAX에 저장할 공간이 부족할때 추가로 저장을 담당한다.
- 나눗셈의 나머지 값을 저장한다. (나눗셈의 몫은 EAX에 저장됨)
- 일반 자료를 저장하거나 각종 연산에 사용하는 변수로 사용된다.
3) ECX(Extended Counter Register)
- 32bit로 구성된 레지스터이며, 16bit 환경에서 CX라고하며, 각각 8bit씩 CH와 CL로 구성된다.
- 반복문(for, while)을 사용할 경우 반복 카운터 값을 주로 저장한다. (무조건 ECX에만 저장하는 것은 아니다.)
4) EBX(Extended Base Register)
- 32bit로 구성된 레지스터이며, 16bit 환경에서 BX라고하며, 각각 8bit씩 BH와 BL로 구성된다.
- 메모리 주소를 저장하거나, 공간이 추가적으로 필요할 때 사용하는 여분의 레지스터이다.
5) ESI(Extended Source Index)
6) EDI(Extended Destination Index)
- 메모리의 한 영역(Source)을 다른 영역(Destination)으로 데이터를 연속적으로 복사할 사용한다.
- ESI는 복사될 대상의 주소가 저장되며, EDI에는 대상이 복사되는 영역의 주소가 저장된다.
- Ex) 'Ctrl+C'가 ESI, 'Ctrl+V'가 EDI
7) ESP(Extended Stack Pointer)
- 현재 스택 영역에서 가장 낮은 주소를 저장하며, 이 저장된 주소는 스택의 끝 위치를 의미한다.
- 또한 저장된 주소는 변수 선언시 지정되는 주소의 값을 의미한다.
8) EBP(Extended Base Pointer)
- 스택에서 함수의 시작 주소 값을 저장하며, 스택의 기준점이 된다.
- 즉, 함수 선언시 지정되는 주소 값이 저장된다.
Ex1) EBP, ESP
- 스택 프레임은 4바이트 단위로 구성된다.
[낮은 주소]
──────── ESP
EBP-12 지역변수
────────
EBP-8 지역변수
────────
EBP-4 지역변수
────────
EBP
────────
EBP+4 리턴주소
────────
EBP+8 인자개수
────────
EBP+12 인자값
────────
[높은 주소]
Ex2) ESP, EBP
[낮은 주소] - EBP-12byte에 저장된 값은? 1
──────── ESP - EBP+8byte에 저장된 값은? 5
① a - 현재 ESP는 EBP-몇 byte에 있는가? 12
──────── - mov 6, ebp-4 명령이 실행되면 6은 어디에 저장되는가? 3
② b - mov 2, ebp-8 명령이 실행되면 2는 어디에 저장되는가? 2
────────
③ c
────────
EBP
────────
④ x
────────
⑤ y
────────
⑥ z
────────
[높은 주소]
[참고] EIP
- 다음 실행할 명령어의 주소 값을 저장하는 레지스터이다.
3. 세그먼트 레지스터
- 프로그램에 정의된 메모리상의 특정 영역이며, 코드/데이터/스택 정보들을 저장한다.
1) CS(Code Segment)
- 코드 세그먼트 레지스터
- 실행될 기계 명령어가 저장된 메모리 주소를 저장한다.
2) DS(Data Segment)
- 데이터 세그먼트 레지스터
- 프로그램에서 정의된 데이터, 상수, 작업 영역의 메모리 주소를 저장한다.
- Ex) 전역 변수, 정적 변수
3) SS(Stack Segment)
- 스택 세그먼트 레지스터
- 프로그램이 임시로 저장해야하는 데이터, 변수 주소를 저장한다.
- Ex) 지역 변수
'시스템 보안' 카테고리의 다른 글
Metasploit (0) | 2022.07.04 |
---|---|
Bash Shellshock 취약점 (0) | 2022.07.03 |
nmap 스캔 도구 (0) | 2022.07.02 |
Bind&Reverse TCP (0) | 2022.06.30 |