일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 티스토리챌린지
- adb 옵션
- 안드로이드 adb
- 안드로이드 모바일 앱 모의해킹
- 드림핵 플래그
- 자바스크립트
- 드림핵 리버싱 풀이
- adb
- 자바스크립트강의 후기
- 리버싱 플래그
- 위니브
- 리버싱 스터디
- 더오름
- 리버싱 핵심 원리
- 안드로이드 리버싱
- 인프런 강의 추천
- rev-basic 풀이
- 리버싱핵심원리
- 제주ICT
- dreamhack reversing
- 드림핵 리버싱
- 자바스크립트 강의
- 리버싱 입문
- 리버싱
- 오블완
- 제주코딩베이스캠프
- 자바스크립트 강의 추천
- 안드로이드 adb start-server
- 강의 체험단 1기
- 리버싱 초보
- Today
- Total
해보자고
[리버싱 핵심 원리] 4장 & 5장 정리 본문
# 학습 목표
- 4장: IA-32 Register 기본 설명
- 5장: 스택
4. IA-32 Register 기본 설명
4.1 CPU 레지스터
레지스터: CPU 내부에 존재하는 다목적 저장 공간. 따라서 고속으로 데이터 처리가 가능.
4.2 IA-32 레지스터
4.2.1 Basic program execution registers
1. 범용 레지스터 (General Purpose Registers)
- 범용적으로 사용되는 레지스터
- 32비트(4바이트) // 교재 참고
- AX: 주로 계산할 때 사용. EAX는 주로 함수 리턴 값에 사용. 모든 Win32 API 함수들은 리턴 값을 EAX에 저장 후 리턴.
- BX: 메모리 주소 계산에 사용
- CX: 반복문에서 몇 번째로 반복하고 있는지 기억할 때 사용. 루프를 돌 때마다 1씩 감소.
- DX: 계산의 결과 값을 저장. 또는 메모리에서 읽어온 데이터를 저장
- SI: 메모리 복사 등에서 원본 데이터의 주소 저장
- DI: 메모리 복사 등에서 목적지의 주소 저장할 때 사용
- BP: 스택 주소를 보존할 때 사용
- SP: 현재의 스택 주소 저장
2. 세그먼트 레지스터 (Segment Registers) // 교재 참고..
세그먼트: 메모리를 조각내어 각 조각마다 시작 주소, 범위, 접근 권한 등을 부여해 메모리를 보호하는 기법.
- 세그먼트 메모리는 Segment Descriptor Table(SDT)에 기술되어 있고, 세그먼트 레지스터는 SDT의 index를 저장함.
- 16비트(2바이트)
- CS: 프로그램의 코드 세그먼트
- SS: 스택 세그먼트
- DS: 데이터 세그먼트
- ES, FS, GS: 추가적인 데이터 세그먼트
3. 프로그램 상태와 컨트롤 레지스터
EFLAGS: 플레그 레지스터
- 32비트(4바이트) // 16비트의 FLAGS의 확장 형태가 EFLAGS
- 각 비트는 1 또는 0의 값을 지님. (T/F)
- 현재의 리버싱 단계(그러니까 초보... )에서는 ZF, OF, CF만 기억해두자
(이미지는 교재 혹은 구글 참고.)
- ZF: Zero Flag, 연산 명령 후 결과 값이 0이면 True로 세팅된다.
- OF: Oveflow Flag, signed integer의 oveflow 발생시 1로 세팅. 그리고 MSB(Most Significant Bit)가 변경되었을 때 1로 세팅.
- CF: Caffy Flag, unsigned integer의 overflow 발생시 1로 세팅.
4. Instruction Pointer
EIP: Instruction Pointer
- CPU가 처리할 명령어의 주소를 나타낸다.
- 32비트(4바이트) // 16비트 IP 레지스터의 확장 형태가 EIP
5. 스택
5.1 스택
프로세스에서의 스택 메모리 역할:
1) 함수 내의 로컬 변수 임시 저장
2) 함수 호출 시 파라미터 전달
3) 복귀 주소(return address) 저장
5.2 스택의 특징
- ESP(스택 포인터) 의 초기값은 Stack Bottom에 가깝다.
- 높은 주소 -> 낮은 주소 방향으로 자라난다.
'리버싱 > 리버싱 핵심 원리' 카테고리의 다른 글
[리버싱 핵심 원리] Visual Basic 파일 특징 (1) | 2024.11.22 |
---|---|
[리버싱 핵심 원리] 7장 정리 (0) | 2024.01.06 |
[리버싱 핵심 원리] 6장 정리 (0) | 2023.12.27 |
[리버싱 핵심 원리] 2장 일부 & 3장 정리 (0) | 2023.04.02 |
[리버싱 핵심 원리] 1장 & 2장 일부 정리 (0) | 2023.03.16 |