나도 처음 리버싱을 접할때 어셈블리어에 대해서 조금 학습을 하고 공부를 시작했는데 이해하기 힘들엇던 부분이 아마 레지스터와 관련된 부분이라고 생각을 한다.
레지스터는 CPU 안에 다목적 저장공간을 뜻한다.
처음에는 EAX 등등 그냥 변수를 저장하는 공간이라고 생각했지만 공부를 해보니 정말 많은 정보들을 내포하고 있었다.
초급 리버싱에서는 Basic program execution register 에 대해서 알아야 한다.
하위그룸에서 4가지로 분류가 가능하다.
General Purpost registere(32bit - 8)
Segment Register(16bit - 6)
Program Status and Control Register(32bit - 1)
Instruction Pointer(32 bit - 1)
범용 레지스터는 다양하게 사용이된다.
EAX
EBX
ECX
EDX
가 있는데
EBX,EDX 는 주로 산술연산과 변수 저장등의 일을 한다.
ECX는 반복문(loop)에서 카운트 하는 역활을 담당하고
EAX는 함수의 리턴값을 저장한후 리턴하는 역활을 한다.
EBP:스택 프레임
ESI :메모리 복사
EDI :메모리 복사
ESP : 스택 메모리주소 = 스택 포인터
스택프레임이란 함수가 호출되었을떄 ESP에 주소를 저장하고 함수를 리턴할때 주소로 돌려주어 스택이 깨지지 않게 해주는 역활을 담당한다. 이 글을 읽으면 이해가 매우 쉽다. 특히 ESP 같은 경우 매우 자주 나와서 알아두면 디버깅시에 매우 편하다.(http://blog.naver.com/PostView.nhn?blogId=hermet&logNo=56227646)
세그먼트 레지스터는 메모리 관리 모델에서 나온 말이라고 한다.
이부분은 설명이 짧게 되어있고 고급 리버싱에서 자세히 다룬다고 한다. 한번 구글링을 해봤는데 아직 접근할 영역은 아닌듯하다...
EFLAGS
플래그 레지스터는 각 비트마다 1은 on/True 0은 off/False 를 나타낸다. 오버플로등 다양하게 사용은 되는데... 사실 아직 감이 잡히는 부분은 아니다.
EIP
cpu가 처리할 명령어의 주소를 가르킨다.
값을 직접 변경할수 없다.
이 2가지 특징을 가진다.
스택은 메모리를 저장하는 방법중 하나이며 프로세스에서 스택 메모리의 역활은
1. 함수 내의 로컬변수 임시 저장
2. 함수 호출 시 파라미터 전달
3. 복귀 주소(return address)저장
스택은 크게 두가지 특징을 가진다.
스택에 값을 입력하면 스택포인터는 감소하고 반대로 스택에 값을 꺼내면 스택 포인터는 증가하낟.
스택포이터의 초기 값은 스택 메모리 아래쪽에 있다.
'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글
스택 프레임 (0) | 2020.02.26 |
---|---|
abex' crackme #1 크랙 (0) | 2020.02.25 |
빅 엔디언/ 리틀 엔디언 (0) | 2020.02.24 |
2. 메인함수를 빨리 찾는 4가지 방법과 나의 접근방법 (0) | 2020.02.21 |
1. 메인 함수 찾기 (0) | 2020.02.21 |