취코, 취하다 코딩에~
레지스터리란? 본문
영어로는 '기록하다'라는 의미를 지님
CPU 내부에는 메모리 대신에 메모리 보다 무지 빠른 Register가 쓰인다.
but CPU만 Register를 사용하는 것은 아니다.
Register는 Flip Flop의 집합이며, 이 Flip Flop이라는 것은 각각 1bit 정보를 저장할 수 있는 것을 의미, n-bit Register라는건 n bit의 정보를 저장할 수 있는 n개의 FlipFlop으로 이루어진 Group을 말하는 것
또 레지스터는 task를 수행하기도 하고 명령을 시킬수도 있어서 Memory mapped I/O의 구현이 가능해 집니다.
범용 레지스터: 특별한 용도없이 사용 가능한 레지스터 - eax, ebx, ecx, edx
포인트 레지스터 - ebp, esp, eip
인덱스 레지스터 - esi, edi
플래그 레지스터 - eflags
IA - 32 레지스터
1) Basic program execution registers
2) x87 FPU registers
3) MMX registers
4) Control registers
5) Memory management registers
6) Debug registers
7) Memory type range registers
8) Machine specific registers
9) Machine check registers
Basic program execution
1) General - purpose registers(범용 레지스터)
2) segment Registers(세그먼트 레지스터)
3) program status and control Registers(프로그램 상태와 컨트롤 레지스터)
4) Instruction pointer(EIP의 IP)
[그림 1.05]
범용 레지스터(General - purpose registers) - 막쓰는 레지스터, 32비트, 상수/주소저장, 특정레지스터 저장
[그림 1.06]
산술에 쓰이는 것들
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는 반복문 계싼 EAX는 함수리턴, Wind32 API함수들은 리턴값을 EAX저장 후 리턴한다.
API가 호출하면 ECX, EDX는 변경되어진다. 따라서 중요값이 여기에 저장되어있다면 호출전 스택에 백업 필수
레지스터 직접 조작 - MUL, DIV, LODS
세그먼트 레지스터
IA-32 메모리 관리모델
메모리를 조각내어 시작 주소, 범위, 접근권한등을 부여해서 메모리보호 하는 기법
세그먼트는 페이징기법과 함께 가상메모리를 살제 물리 메모리로 변경할 때 사용
[그림 1.07]
세그먼트 레지스터(CS,SS,DS,ES,FS,GS)는 SDT의 index를 가지고 있다.
CS: code segment
SS: stack segment
DS: data segment
ES: Extra segment
FS, GS : Data segment
FS는 나중에 고급 디버깅 SEH(Structured Ey-ception Handling), TEB(Thread Environment Block), PEB(prcess Environment Blcok)등에 쓰인다
프로그램 상태와 컨트롤 레지스터
EFLAG - Flag Register
32bit 16bit
각비트는 On/True면 1 Off/False면 0
디버깅에 필요한 3가지 플래그
1) ZF(zero Flag) - 연산 후 결과 0이면 1로 셋팅
2) OF(overflow flag) - 오버플로우 발생 했을 때, Most significant Bit 변경될 때)
3) CF(carry flag) 부호 없는 수 오버플로 발생 했을 때 1
EIP - intruction pointer - CPU가 처리할 명령어 주소를 나타내는 레지스터
범용레지스터와 달리 EIP는 직접 변경 불가
따라서 JMP,JCC,CALL,RET,interrupt(예외발생)으로 EIP변경
'프로그래밍 > 리버싱' 카테고리의 다른 글
올리 디버거 사용법 (0) | 2018.02.11 |
---|---|
핵심 .dll 파일 역할 (0) | 2018.02.11 |
리버싱 책 보는 단계 (0) | 2018.02.11 |
Comments