티스토리 뷰

728x90
반응형

[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 레지스터

스택 포인터로 스택의 가장 위쪽 주소를 가리킨다.

마지막으로 데이터가 추가 된 위치를 저장한다.

728x90
반응형
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today