티스토리 뷰
[Reversing] 레지스터 관련 정리
정리가 필요하여 메모한다.(개인정리)
> https://software.intel.com/content/www/us/en/develop/articles/intel-sdm.html
레지스터 크기
E 문자가 붙으면 32비트
R 문자가 붙으면 64비트
x64 R 레지스터에 저장된 값중 dword, word, byte만 사용도 가능하며, 64bit r8의 경우 r8d, r8w, r8b를 통해 각 비트에 접근 할 수 있다고 한다.
RAX 64비트 EAX 32비트 AX 16비트 AH/AL 8비트 |
소프트웨어 레지스터
범용레지스터
논리, 산술 연산등에 사용되나 디버깅 시 유기적으로 사용하는 것 같다.
AX, BX, CX, DX, SP, BP, SI, DI
세그먼트 레지스터
코드, 데이터, 스택등의 주소를 가리키며, FS의 경우 TEB 주소를 지정하는데 사용된다.
SS, CS, DS, ES, FS ,GS
플래그 레지스터
디버깅 시 관련된 플래그들이 존재하며 JMP 명령어 즉, 해당 플래그에 따라 분기가 달라진다.
예를 들어 CMP ESI, 2 비교 시 ESI가 “2”라면 제로 플래그가 “1”이지만, ESI가 “2”가 아니기 때문에 “0”으로 바뀐다.
이후 SETE AL(SET if equal)는 제로 플래그가 참이면 바이트 레지스터를 “1”로 설정한다.
하지만 현재 제로 플래그는 “0”으로 AL 레지스터(EAX의 하위 1바이트)는 “1”로 설정이 되지 않는다
CF, PF, AF, ZF, SF, TF, IF, DF, OF
CMP dst, src 시
dst = src일 때 ZF=1, CF=0,
dst<src일 때 ZF=0, CF=1,
dst>src일 때 ZF=0, CF=0
하드웨어 레지스터
제어 레지스터
해당 레지스터는 프로세스 제어 관련 레지스터로 추후 분석 시 관련 내용을 찾으면 추가 정리하겠다.
CR0, CR2, CR3, CR4, CR8
디버그 레지스터
해당 레지스터는 예전 분석시 하드웨어 브레이크 포인트 관련하여 https://jeongzzang.com/101 본적이 있다.
DR0 ~ 0R3
DR6, DR7
추가메모
RSP 레지스터
스택 포인터로 스택의 가장 위쪽 주소를 가리킨다.
마지막으로 데이터가 추가 된 위치를 저장한다.
'Reversing > ETC' 카테고리의 다른 글
[Reversing] 델파이(Delphi) 관련 정리 (0) | 2020.07.09 |
---|---|
[Reversing] MS Crypto API (0) | 2020.06.26 |
[Reversing] ZwQuerySystemInformation(), ZwDuplicateObject(), ZwQueryObject() (0) | 2020.05.14 |
[Reversing] ROP(Return Oriented Programming) (0) | 2020.04.28 |
[Reversing] 생성 방식에 따른 메모리 기본값 (0) | 2020.04.24 |
- Total
- Today