공부해요/리버싱_핵심원리

4장. IA-32 Register 기본 설명

yenas0 2024. 9. 11. 03:10
반응형

CPU 레지스터

Register: CPU 내부에 존재하는 다목적 저장 공간

 

Basic program execution register

- General Purpose Register(32bit)

- Segment Registers(16bit)

- Program Status and Control Register(32bit)

- Instruction Pointer(32bit)

 

 

범용 레지스터

IA-32에서 32비트의 크기를 가짐

상수/ 주소 등을 저장할 때 사용

특정 어셈블리 명령어에서는 특정 레지스터를 조작

 

EAX Accumulator for operands and results data
함수 리턴값에 사용
EBS Pointer to data in the DS segment
ECX Counter for string and loop operations
ECX는 Loop에서 반복 카운트로 사용
EDX I/O pointer

=> 주로 산술연산 시 변수 및 상수 저장 용도로 사용

 

EBP Pointer to data on the stack(in the SS segment)
Stack Frame 기법에 사용
ESI source pointer for string operations
메모리 복사에 사용
EDI destination pointer for string operations
메모리 복사에 사용
ESP Stack pointer(in the SS segment)
ESP는 스택 메모리 주소

=> 주로 메모리 주소 저장하는 포인터로 사용

 

 

 

세그먼트 레지스터

세그먼트란 메모리를 조각내어 각 조각마다 시작 주소, 범위, 접근 권한 등을 부여해 메모리를 보호하는 기법

세그먼트 메모리는 Segment Descriptor Table에 기술되어있으며 SDT의 index를 가지고 있음

CC, SS, DS, ES, FS, GS 총 6가지이며 각각의 크기는 16비트이다.

CS Code Segment
SS Stack Segment
DS Data Segment
ES Extra(Data) Segment
FS Data Segment
GS Data Segment

 

 

 

 

프로그램 상태와 컨트롤 레지스터

EFLAGS: Flag Register

32bit

 

Zero Flag(ZF)  연산 명령 후에 결과 값이 0이 되면 ZF가 1로 세팅됨

Overflow Flag(OF) signed integer의 오버플로 발생 시 1로 세팅. MSB 변경 시 1로 세팅
Carry Flag(CF) unsigned integer의 오버플로 발생 시 1로 세팅

 

 

 

Insturction Pointer

EIP: Instruction pointer

CPU가 처리할 명령어의 주소를 나타내는 레지스터

32bit크기

반응형

'공부해요 > 리버싱_핵심원리' 카테고리의 다른 글

7장. 스택 프레임  (1) 2024.09.18
5장. 스택  (0) 2024.09.17
3장. 리틀 엔디언 표기법  (0) 2024.09.11
2장. Hello World! 리버싱  (0) 2024.09.11
1장. 리버싱 스토리  (0) 2024.09.11