작은 메모장
CPU의 레지스터와 주요 명령어 본문
Intel IA32 Processor Register set
인텔의 32비트 마이크로프로세서에서 사용하는 명령 집합 아키텍처의 레지스터 셋
처음에는 8개의 일반 레지스터와 8개의 실수 레지스터를 지원했으나, 시간이 지나며 다양한 레지스터를 지원
범용 레지스터
산술/논리 연산에 사용되는 피연산자 정보, 주소 계산을 위한 피연산자 정보, 메모리 포인터 정보를 담고 있는 레지스터
EAX | 덧셈 혹은 뺄셈 같은 연산의 결과를 저장 |
EBX | ESI, EDI 레지스터와 결합하여 메모리 주소를 저장 |
ECX | 문자열 및 반복실행 포인터 |
EDX | I/O 포인터 |
ESI | 데이터를 조작하거나 복사시, 소스 데이터의 주소를 저장 |
EDI | 데이터를 조작하거나 복사시, 목적지 데이터의 주소를 저장 |
EBP | 스택에 있는 데이터의 포인터 |
ESP | 스택의 포인터 |
세그먼트 레지스터
GDT(Global Descriptor Table)의 인덱스 값을 포함하고 있는 레지스터
CS | 코드 세그먼트 레지스터 |
DS | 데이터 세그먼트 레지스터 |
SS | 스택 세그먼트 레지스터 |
ES | 추가 세그먼트 레지스터 |
FS | - |
GS | - |
EFLAGS 레지스터
명령이 실행되는 과정 중 현재 프로세서의 상태정보, 제어 정보 등을 보관
EIP 레지스터
다음에 실행할 명령의 주소 값을 보관
IA32 기본 명령어
[MOV]
- Source 피연산자의 값을 Destination 피연산자로 복사
- 두 연산자의 사이즈는 반드시 동일해야 함
.text:00401023 mov DWORD [Address], 0Ah
.text:00401027 mov eax, DWORD [Address]
.text:0040102A mov ecx, eax
[MOZX]
- Source 피연산자의 값을 Destination 피연산자로 복사 후 나머지 비트를 0으로 채움
- Destination 피연산자는 레지스터만 사용 가능
.text:00401016 mov DWORD [Address], 11223344h
.text:0040101D movzx eax, WORD [Address]
[MOZSX]
- Source 피연산자의 값을 Destination 피연산자로 복사 후 나머지 비트를 Source 피연산자의 부호비트로 채움
.text:00401016 mov DWORD [Address], 8877h
.text:0040101D movsx eax, WORD [Address]
[ADD]
- Source 피연산자를 동일한 크기의 Destination 피연산자에 더함
- Source 피연산자는 변하지 않으며 덧셈 결과 값은 Destination 피연산자에 저장
[SUB]
- Destination 피연산자를 Source 피연산자만큼 감소
- CPU의 ALU 내부에서는 덧셈이 수행됨
[MUL]
- 부호없는 정수에 대한 곱셈을 수행
- AL, AX, EAX 레지스터에 담겨있는 값에 8, 16, 32비트 값을 곱함
- 연산 결과는 AX, DX:AX, EDX:EAX에 저장됨
[XOR]
- 두 개의 피연산자에서 매칭되는 비트들을 XOR 연산 후, 결과를 Destination 피연산자에 저장
- 동일한 레지스터가 두 개의 피연산자로 사용될 경우 레지스터의 값을 0으로 초기화
[LEA]
- Source 피연산자를 참조하여 계산된 메모리 주소가 Destination 피연산자에 저장
[CALL] 과 [JMP]
JMP | CALL | |
공통점 | 피연산자로 지정된 주소로 프로그램의 실행 흐름을 변경 | |
차이점 | 분기하기 직전 현재 EIP값을 스택에 백업하지 않음 | 분기하기 직전 현재 EIP값을 스택에 백업 |
JZ, JNZ, JA, JB등의 명령에 조건 분기가 가능 | 조건 분기 불가능 |
[RET]
- 의미상 "POP EIP" 명령과 동일
- 물론 EIP를 직접적으로 변경하는 명령어라 사용 불가능
'KISA 사이버 보안 훈련 > 리버스 엔지니어링 훈련' 카테고리의 다른 글
함수 호출규약 (0) | 2023.07.05 |
---|---|
가상주소공간의 스택 메모리 (0) | 2023.07.04 |
PE 파일의 구조 (0) | 2023.07.03 |
운영체제 프로세스 가상주소공간 실습 (0) | 2023.07.03 |
운영체제의 프로세스 가상주소공간 (0) | 2023.07.02 |