상세 컨텐츠

본문 제목

레지스터의 종류와 역할

Reversing

by _young_hyun 2023. 7. 6. 15:53

본문

범용 레지스터(General Purpose Register)

범용 레지스터는 주 용도가 있으나, 그 외 임의의 용도로도 사용 가능한 레지스터이다.

 

  • EAX (Accumulator Register)
    • 산술 연산 및 논리 연산과, 함수의 반환 값 저장에 사용된다.

 

  • EBX (Base Register)
    • 메모리 주소를 저장하기 위해 사용된다.

 

  • ECX (Count Register)
    • 반복문의 반복 횟수나, 각종 연산의 시행 횟수 등을 저장할 때 사용된다.

 

  • EDX (Data Register)
    • EAX와 함께 사용되며, 일반적인 자료를 저장하거나 입출력 연산에 사용된다.

 

 

인덱스 레지스터(Index Register)

  • ESI (Source Index)
    • 데이터를 옮길 때 원본(Source) 주소 값을 저장한다.

 

  • EDI (Destination Index)
    • 데이터를 옮길 때 목적지(Destination) 주소 값을 저장한다.

 

 

포인터 레지스터(Pointer Register)

  • ESP (Stack Pointer)
    • 스택의 가장 끝 주소(하위 주소)를 가리킨다.
    • 스택에 값을 PUSH할 땐 ESP의 값이 증가, POP할 땐 ESP의 값이 감소한다.

 

  • EBP (Base Pointer)
    • 스택의 시작 주소값을 저장한다.

 

  • EIP (Instruction Pointer)
    • 다음 명령어의 주소를 저장한다.

 

 

세그먼트 레지스터(Segment Register)

코드, 데이터, 스택 등 세그먼트에 대한 주소를 가리키기 위해 사용된다.

 

  • CS (Code Segment Register)
    • 실행할 기계 명령어가 저장된 메모리 주소를 저장한다.
    • 코드 세그먼트의 시작 주소를 가리킨다.

 

  • DS (Data Segment Register)
    • 프로그램에 정의된 데이터 세그먼트의 시작 주소를 가리킨다.

 

  • SS (Stack Segment Register)
    • 프로그램 스택 세그먼트(실행 과정에서 필요한 데이터나 연산 결과 등을 임시로 저장하거나, 삭제할 때 사용)의 시작 주소를 가리킨다.

 

  • ES, FS, GS(Extra Segment Register)
    • 문자 연산, 추가 메모리를 지정하는 데 사용하는 여분의 레지스터이다.
    • ES 레지스터는 추가로 사용된 데이터 세그먼트의 주소를 가리키며, FS, GS 레지스터 또한 목적인 비슷하나 실제로 거의 사용되지 않는다.

 

플래그 레지스터(Flag Register)

프로세스의 현재 상태를 저장하고 있는 레지스터이다.

  • CF (Carry Flag)
    • 부호 없는 숫자의 연산 결과가 비트의 범위를 넘을 경우 설정된다.

 

  • ZF (Zero Flag)
    • 연산의 결과가 0일 경우 설정된다.

 

  • OF (Overflow Flag)
    • 부호 있는 숫자의 연산 결과가 비트 범위를 넘을 경우 설정된다.

 

  • PF (Parity Flag)
    • 산술 연산 결과가 짝수일 경우 설정된다.

 

  • AF (Adjust Flag)
    • 연산 결과 하위 4bit에서 비트 범위를 넘을 경우 설정된다.

 

  • SF (Sign Flag)
    • 연산 결과가 음수일 경우 설정된다.

 

  • DF (Direction Flag)
    • 문자열 명령을 제어해, DF가 설정되어 있으면 문자열을 높은 주소에서 낮은 주소로, 설정되어 있지 않으면 낮은 주소에서 높은 주소로 처리한다.

 

  • TF (Trap Flag)
    • 디버깅을 할 때 사용되며, 설정되어 있을 경우 Single Step Mode(한번에 한 명령어만 실행되는 모드)가 된다.

 

  • IF (Interrupt enable Flag)
    • 프로세스의 인터럽트 처리 여부를 제어하며, IF가 설정되어 있으면 시스템의 인터럽트를 처리하고, 0이면 무시한다.