리버싱

CPU 레지스터와 주요 명령어 - IA32 주요 레지스터

이둥둥 2025. 2. 24. 16:07
  • 레지스터: cpu내에 존재하는 작은 크기의 다목적 저장공간, 물리적으로 가깝기 때문에 CPU가 직접 접근할 수 있고 속도가 빠름.
  • 산술, 논리, 반복, 스택메모리 등 정보
  • 프로그램 실행에 필요한 정보(메모리 주소, 데이터 등)이 있음
  • 반면 메모리(RAM ..)는 더 많은 데이터를 저장할 수 있음
  • ALU가 계산기라면 레지스터는 메모장, 연습

 


범용 레지스터(General purpose register)

산술/논리 연산에 사용되는 피연산자 정보, 주소 계산을 위한 피연산자 정보, 메모리 포인터 정보를 담고있는 레지스터

비트에 따라서 레지스터 명칭도 조금씩 달라진다

 

32 bits : EAX EBX ECX EDX
16 bits : AX BX CX DX
 8 bits : AH AL BH BL CH CL DH DL

 

EAX 산술/논리 연산 수행 결과값 저장, 윈도우 함수 호출 결과값 저장
EBX 메모리 접근을 위한 베이스 레지스터
ECX for문과 같은 루프문에서 카운터 레지스터로 사용됨
EDX I/O 포인터 레지스터
ESI 복사할 원본의 포인터
EDI 복사가 될 목적지 포인터
EBP 가상주소공간에 스택이 존재하고 이를 구분짓이 위해 있는게 스택프레임, 스택프레임 형태로 저장된 함수의 지역변수, 전달 인자를 참조 & 값의 수정 시 사용되는 레지스터.

스택 메모리에 있는 함수들이 사용하는 영역의 베이스 주소를 포인팅
ESP 스택의 크기를 조정할 때 사용되는 레지스터. 스택의 최상단 주소값→ 스택의 크기를 나타냄

 

 

 

세그먼트 레지스터(Segment register)

메모리 상의 세그먼트 정보를 담은 자료구조 GDT의 인덱스 값을 포함하고 있는 레지스터

 

CS 코드 세그먼트: 코드가 저장된 .text섹션의 기본 위치를 저장하고 있어 데이터 접근시 사용된다
DS 데이터 세그먼트: .data 섹션의 변수의 기본 위치를 저장
ES 문자열 연산에서 사용되는 추가 세그먼트 레지스터
SS 스택 세그먼트의 기본 위치를 저장하고 스택 포인터/베이스 포인터 사용에 필요함
FS 추가 세그먼트 레지스터
GS 추가 세그먼트 레지스터

 

 

 

디버그 레지스터(Debug register)

: 프로그램 디버깅을 목적으로 프로세서에 의해 사용되는 레지스터

 

Debug Address Registers DR0-DR3 breakpoint 설정 주소를 저장한다. 전역 혹은 지역 변수로 설정할 수 있음
Debug Control Register DR7 DR0-DR3에서 설정된 중단점의 작동 조건을 제어함(명령어 실행, 데이터 길이 등)
Debug Status Register DR6 디버그 상태를 나타내고 발생한 예외 정보를 저장하며 디버그 핸들러가 처리

 

 

EIP 레지스터

다음 실행할 명령어의 주소 값을 저장하는 레지스터로, 가장 자주 바뀌고

Instruction pointer, program counter로도 불림