레지스터 구조

oogu ㅣ 2022. 7. 6. 21:01

@ 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