Jaeseo's Information Security Story

리버싱 기초 - 범용 레지스터 본문

Security Study/Reversing

리버싱 기초 - 범용 레지스터

Jaeseokim 2019. 10. 14. 13:57
  • RAX(64bit) -> EAX(32bit) -> AX(16bit) -> AH(8bit - high) - AL(8bit - low)

    • Accumulator for operands and results data
    • 주로 곱셈, 나눗셈에 사용되며, 함수의 반환값을 저장(리턴값)
  • RBX(64bit) -> EBX(32bit) -> BX(16bit) -> BH(8bit - high) - BL(8bit - low)

    • Pointer to data in the DS segment
    • ESI, EDI 와 결합해 인덱스에 사용됨.
  • RCX(64bit) -> ECX(32bit) -> CX(16bit) -> CH(8bit - high) - CL(8bit - low)

    • Counter for string and loop operations
    • 반복카운터로 사용된다. 또는 반복한 횟수를 저장시킨다.
  • RDX(64bit) -> EDX(32bit) -> DX(16bit) -> DH(8bit - high) - DL(8bit - low)

    • I/O Pointer
    • EAX와 같이 사용되며 부호 확장 명령 등에 사용.

변수라고 생각 하면 편하다.


  • RSI(64bit) -> ESI(32bit) -> SI(16bit)

    • Source pointer for string operations
    • 데이터 복사하거나 조작 할때 소스 데이터 주소가 저장된다.
  • RDI(64bit) -> EDI(32bit) -> DI(16bit)

    • destination pointer for string operations
    • 복사작업을 할때 목적지 주소가 저장된다.

INDEX 관련 작업 할때 사용


  • RBP(64bit) -> EBP(32bit) -> BP(16bit)

    • Pointer to data on the stack (in the SS segment)
    • 하나의 스택 프레임의 시작 주소가 저장된다. 현재 사용되는 스택 프레임이 살아있는 동안 EBP의 값은 변하지 않는다. 현재 사용한 스택 프레임이 사라지면 이전에 사용되던 스택 프레임을 가리키게 된다.
  • RSP(64bit) -> ESP(32bit) -> SP(16bit)

    • Stack pointer (in the SS segment)
    • 하나의 스택 프레임의 끝 지점 주소가 저장된다, PUSH, POP 명령어에 따라 "4byte"씩 변한다.

STACK 관련 작업 할때 사용


  • RIP(64bit) -> EIP(32bit) -> IP(16bit)

    • 다음에 시행할 명령어가 저장된 메모리 주소가 저장된다. 현재 명령어를 모두 실행한 다음 EIP 레지스터에 저장된 주소에 있는 명령어를 실행한다.

특수 레지스터

Comments