레지스터(Register)
- CPU(Central Proceessing Unit)가 요청을 처리하는 데이터의 임시저장 공간이다.
- 레지스터는 공간은 작고 가격은 비싸지만 CPU에 직접 연결되어 있어서 연산 속도가 RAM, HDD, SDD 보다 빠르다.
- CPU는 자체적으로 데이터를 저장할 수 없으므로 레지스터를 이용하여 연산처리 및 번지 지정을 도와준다.
- 컴퓨터 장치들을 제어한다.
범용 레지스터(General Purpose Register)
- 위 그림은 레지스터의 크기를 나타낸 그림이다.
- EAX레지스터를 예를 들면 EAX, AX, AH, AL은 모두 다른 레지스터가 아닌 EAX레지스터에서 분할된 레지스터의 이름이다.
- 알파벳 EAX 중 16byte를 통해 AX레지스터로 접근이 가능하고 AX를 2개로 나누면 AX(AccumulationHigh),
AL(Accumulation Low)값으로 나누어지게 되는데 이 두 레지스터가 각각 4byte씩 할당된다.
(효율적으로 레지스터를 활용하기 위해 분할한 것이다.)
산술 연산 레지스터
EAX(Accumulation)
- 산술연산에 사용되는 레지스터이다.(상수/변수 값의 저장 용도)
- 함수의 return 값 지정한다.
EBX(Base Register)
- 간접 번지지정에 사용된다.
- 산수 / 변수를 저장한다.
ECX(Counter Register)
- 반복(Loop)에서 반복 Count 역할을 수행
REP(반복 레지스터)에 얼마나 반복할 것인지를 ECX 레지스터에 저장한다.
EDX(Data Register)
- EAX를 보조하는 역할을 수행한다.
- 4byte * 4byte를 연산하면 EAX에 담기지 않을 수 있다 → EDX(상위 bit), EAX(하위 bit)를 이용하여 8byte에 저장한다.
- 나누기를 진행할 경우 몫은 EAX 나머지는 EDX에 저장이 된다.
인덱스 레지스터
ESI(Source Index)
- 복사나 비교를 할 경우 출발지 주소를 저장하는 레지스터이다.
EDI(Destination Index)
- 복사나 비교를 할 경우 목적지 주소를 저장하는 레지스터이다.
- stos, movs를 사용할때 마다 1씩 증가한다.
포인터 레지스터
ESP(Stack Pointer)
- Stack Pointer의 가장 최근에 저장된 공간의 주소를 저장하는 레지스터이다.
- 스택이 쌓일때 마다 ESP 값이 1씩 증가한다.
EBP(Base Pointer)
- Stack Pointer의 기준점(바닥 부분)을 저장하는 레지스터이다.
- EBP 및에는 Return값이 존재한다.
EIP(Instruction Pointer)
- 다음 명령어의 위치를 저장하는 레지스터이다.
- PC (Program Counter) 라고도 불린다.
- 다음 명령어의 위치를 저장하는 레지스터이다.
E-flag 레지스터(E-flag Register)
- 16bit인 flag 레지스터가 확장(E)된 레지스터이다.
Sign Flag
- 연산결과 최상위 bit가 1인 경우 1로 설정된다.
Overflow Flag
- 연산의 결과가 용량을 초과하였을 경우 1로 설정된다.
Zero Flag
연산의 값이 0일 경우 1로 설정된다.
Carry Flag
- 덧셈과 뺄셈에서 빌림수(Borrow) 발생 시 1로 설정된다.
Debug Register
DRO0 ~ DRO3(Hardware Break Point Address)
- Hardware Break Point의 주소이다. 해당 주소에 접근, 쓰기, 실행씨 INT 1이 발생한다.
DR6(Debug State Register)
- INT1이 발생한 이유(디버깅 이벤트의 종류)를 알려주는 레지스터이다. 프로세스에 의해 세트 되고 사용자가 직접 지워줘야 한다.
DR7(Debug Control Register)
- 4개(DR0 ~ DR3)의 Hardware Break Point의 발동조건을 지정한다.
★어셈블리 명령어를 보고싶으면 아래 링크 클릭★
https://peemangit.tistory.com/40
'Hacking & Security > Reversing' 카테고리의 다른 글
리버싱 분석 환경 차이점 (0) | 2019.10.17 |
---|---|
어셈블리 명령어 정리 (2) (1) | 2019.10.16 |
어셈블리 명령어 정리 (1) (1) | 2019.10.16 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊