공부해요/리버싱_핵심원리
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크기
반응형