리버싱
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로도 불림