▶ 64bit 운영체제
64bit 운영체제는 2^64만큼의 비트를 사용한다.
→ 메모리를 0부터 18,446,744,073,709,551,616까지 저장할 수 있다.
64bit 컴퓨터에서는 최대 1tb(2^10gb)만큼의 RAM이 들어간다.
▶ 64bit 레지스터
※ 레지스터란?
→ CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 젖아하는 기억장치
→ 레지스터의 용량이 클수록 메모리에서 더 많은 데이터를 가져와 저장할 수 있으므로 처리속도가 빨라진다.
▷ 범용 레지스터
RAX | 산술/논리 연산 수행 후 함수의 return 값 저장 |
RBX | 메모리 주소 저장 |
RCX | 반복문에서 카운터로 사용되는 레지스터 |
RDX | I/O 주소 지정 시 사용, 다른 레지스터를 서포트하는 보조 레지스터 |
R8~R15 | 64bit 프로세서에서 추가된 범용 레지스터, 다양한 용도로 사용 |
▷ 인덱스 레지스터
RSI | 복사할 데이터의 주소 저장 |
RDI | 복사된 데이터의 주소 저장 |
▷ 포인터 레지스터
RSP | 스택의 끝 지점 주소 (현재 스택 주소) 저장 스택의 가장 높은 곳을 가리킴 push, pop 명령을 통해 RSP 값이 위아래로 8바이트씩 이동 |
RBP | 함수 호출 시 형성되는 스택프레임의 시작 지점 주소 (스택 복귀 주소) 저장 |
▷ 플래그 레지스터
RFLAGS register | 시스템 제어 용도, 비교/조건문 처리 용도 | |
CF(Carry Flag) | 부호 없는 수끼리 연산 결과에서 자리올림/자리내림이 발생할 때 1, unsigned int 값을 벗어날 때 1 |
|
OF(Overflow Flag) | 부호 있는 수끼리 연산 결과에서 용량을 초과했을 때 1 | |
SF(Sign Flag) | 연산 결과 최상위 비트가 1인 경우 1 | |
ZF(Zero Flag) | 연산 결과가 0이면 1 | |
AF(Auximiliary-carry Flag) | 16bit 연산 시 자리올림/자리내림이 발생할 때 1 | |
PF(Parity Flag) | 연산 결과가 짝수면 1, 홀수면 0 | |
DF(Direction Flag) | 방향 플래그 0으로 설정 시 해당되는 어셈블리 명령에 제공되는 주소 증가 |
|
IF(Interrupt Flag) | 1은 인터럽트 활성화, 0은 인터럽트 비활성화 | |
TF(Trap Flag) | single step mode에서 프로세스의 동작 허용 |
※ 하나의 레지스터는 크기에 따라 적절히 쪼개 사용할 수 있다.
RAX(64 bits) - EAX(32 bits, Extended AX) - AX(16 bits) - AL(8 bits) - AH(8 bits)
'2021-2 STUDY > Reversing Study' 카테고리의 다른 글
Week02_Dreamhack rev-basic-2, rev-basic-3 (0) | 2021.09.25 |
---|---|
Week02_PE 파일 구조 (0) | 2021.09.25 |
Week01_abex' crackme #1 (0) | 2021.09.11 |
Week01_Dreamhack rev-basic-0, rev-basic-1 (0) | 2021.09.11 |
Week01_32bit/64bit 호출 규약 (0) | 2021.09.11 |