레지스터라는 cpu에 있는 저장 공간을 이용해
데이터를 저장, 복사, 연산 등을 하는데
범용 레지스터들
EAX
EBX
ECX
EDX
AX, AL, AH
BX, BL, BH
CX, CL, CH
CX, DL, DH
가 있고
EAX는 가장 자주 쓰게 되고 함수의 리턴 값이 EAX에 들어가기도, 함수의 인자로 사용하기도 함
ECX는 주로 반복문 등에 쓰여서 반복문의 카운터로 사용
EBX, EDX는 그냥 막 쓰이고
윈도우 API 등에서는 ECX, EDX를 자주 사용한다고 한다(나뭇잎 책에서 발췌)
E(Extended)가 빠진 ~X레지스터는 16비트 레지스터 크기
~L, ~H레지스터는 ~X 레지스터의 각각 하위, 상위 8비트로 나뉘어진 레지스터 크기
그 다음 플래그 레지스터 중
리버싱 핵심 원리에서 알아둬야 한다고 했던 기본적인 3가지
ZF(Zero Flag)
OF(Overflow Flag)
CF(Carry Flag)
제로 플래그는 어떤 연산 결과가 0이 되면 1이 되는 레지스터
오버플로 플래그는 오버플로우가 일어나게 되면 1이 되는 레지스터같고
캐리 플래그는 연산 결과가 자리수가 넘어가는 일이 발생할 때(2진수 계산에서 캐리가 일어날 때) 1이 되는 것 같다.
그리고 중요한 레지스터 두가지
ESP
EBP
ESP는 스택 포인터(현 스택의 top 위치)
EBP는 베이직 포인터(현 스택의 처음 위치)
그 다음으로
다음 실행할 명령어의 주소가 담긴 포인터 레지스터인
EIP 레지스터
가 있다.
'리버스 엔지니어링' 카테고리의 다른 글
리버싱 연습 - abex crackme 2 (1) (0) | 2020.06.30 |
---|---|
리버싱 공부 - 스택 프레임 기법 (0) | 2020.06.30 |
리버싱 연습 - 점프에 관하여 (0) | 2020.06.30 |
리버싱 연습 2-2 NULL 패딩에 패치 (0) | 2020.06.30 |
리버싱 연습 2 - 직접 문자열 패치 (0) | 2020.06.30 |