IA-32(Intel architecture 32bit)
1. CPU Register
1.1 Basic program execution registers
- General Purpose Registers (32bit, 8개)
- Segment Registers (16bit, 6개)
- Program Status and Control Register (32bit, 1개)
- Instruction pointer(32bit 1개)
1.1.1 General Purpose Registers
- 보통 상수/주소 등을 저장할때사용
- 각 레지스터는 하위 호환성을 위해 몇가지 구획으로 나뉨
EAX의 예를 들면 EAX : 0~31(32bit)
AX : 0~15(EAX의 하위16bit)
AH : 8~15(AX의 상위 8bit)
AL : 0~7(AX의 하위 8bit)
- EAX : Accumulator for operands and results data
- EBX : Pointer to data in the DS segment
- ECX : Counter for string and loop operations
- EDX : I/O pointer
* 위의 네가지는 주로 산술연산에 사용
* ECX는 loop의 카운터, EAX는 함수 리턴값에 사용
- EBP : Pointer to data on the stack (in the SS segment)
- ESI : source pointer for string operations
- EDI : destination pointer for string operations
- ESP : Stack pointer (in the SS Segment)
* 위 네가지는 주로 메모리 주소를 저장하는 포인터
1.1.2 Segment Registers
메모리를 조각내어 각 조각마다 시작주소, 범위, 접근 권한 등을 부여하여 메모리를 보호하는 기법
- CS : Code Segment (16bit)
- SS : Stack Segment (16bit)
- DS : Data Segment (16bit)
- ES : Extra(Data) Segment (16bit)
- FS : Data Segment (16bit)
* SEH(Structured Exception Handling), TEB(Thread Environment Block),
PEB(Process Environment BlocK) 등의 주소 계산 할때 사용
- GS : Data Segment (16bit)
1.1.3 Program Status and Control Register
- EFLAGS : Flag Register (32bit)
각 비트가 0 또는 1 값을 가지면 의미있는 플래그의 역할을함
- ZF(Zero Flag) : 연산 명령 후 결과가 0 이면 ZF가 1로 세팅
- OF(Overflow Flag(OF) : signed integer의 오버플로우가 발생했을 때 1로 세팅,
MSB(Most Significat Bit)가 변경되었을때 1로 세팅
- CF(Carry Flag) : unsigned integer의 오버플로우가 발생했을때 1로 세팅
1.1.4 Instruction Pointer
- EIP : Instruction pointer (32bit)
CPU가 처리할 명령어의 주소를 나타냄
* 값을 직접 변경할 수 없어 JMP, Jcc, CALL, RET 등 특정 명령어를 사용하거나,
인터럽트, 예외 등을 발생시켜야함
2. Stack
로컬변수 저장, 함수 파라미터 전달, 복귀주소 저장 등 다양한 용도로 사용
FILO(First In Last Out) 구조
스택은 높은 주소에서 낮은 주소 방향으로 자람.
'정보보호 > Riversing' 카테고리의 다른 글
Stack Frame (0) | 2013.09.06 |
---|---|
올리디버거 기본 사용법 (0) | 2013.09.05 |