ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • IA-32 Register 기본 설명(1/3)
    IT/리버싱 핵심원리 2017. 11. 23. 14:30

    공부를 시작하기에 앞서 본 글은 '리버싱핵심원리', 이승원 저자, 인사이트 를 참고했음을 밝힙니다.

    또한 공부하는 입장에서 정리를 목적으로 작성하였기때문에 틀린 정보가 있을수도 있다는 것을 알려드립니다.


    관련 글

    IA-32 Register 기본 설명(1/3)

    IA-32 Register 기본 설명(2/3)

    IA-32 Register 기본 설명(3/3)


    1. CPU 레지스터란?

     - 레지스터(Register)란 CPU 내부에 존재하는 다목적 저장 공간이다.

     - CPU가 RAM에 있는 데이터를 엑세스하는 시간이 오래 걸리지만 레지스터는 데이터를 엑세스하는 시간이 빠르다.


    2. Basic program execution registers
     - General Purpose Registers(32비트 - 8개)
     - Segment Registers(16비트 - 6개)
     - Program Status and Control Register(32비트 - 1개)
     - Instruction Pointer(32비트 - 1개)


     2.1 General Purpose Registers(범용 레지스터)

      - IA-32에서 각각의 범용 레지스터들의 크기는 32비트(4바이트)

      - 보통 상수/주소 등을 저장할 때 주로 사용되며, 특수한 용도로도 사용된다.


    [그림 2.1.1] 범용 레지스터


    출처 : http://www.intel.co.kr/content/www/kr/ko/architecture-and-technology/64-ia-32-architectures-software-developer-manual-325462.html


    · EAX : Accumulator for operands and results data

    · EBX : Pointer to data in the DS segment

    · ECX : Counter for string and loop operations

    · EDX : I/O pointer

     - 위 4개의 레지스터들은 주로 산술연산(ADD, SUB, XOR, OR 등) 명령어에서 상수/변수 값의 저장 용도로 많이 사용된다.

     - 추가적으로 ECX는 반복문 명령어(LOOP)에서 반복 카운트(loop count)로 사용된다.(루프 돌 때마다 ECX 1씩 감소)

     - 추가적으로 EAX는 일반적으로 함수 리턴 값에 사용한다. 모든 Win32 API 함수들은 리턴 값을 EAX에 저장한 후 리턴된다.


    · EBP : Pointer to data on the stack (in the SS segment)

    · ESI : source pointer for string operations

    · EDI : destination pointer for string operations

    · ESP : Stack pointer (in the SS segment)

     - 위 4개의 레지스터들은 주로 메모리 주소를 저장하는 포인터로 사용한다.

     - ESP는 스택 메모리 주소를 가리킨다. 프로그램의 흐름에 중요한 영향을 미치는 레지스터이기 때문에 다른 용도 사용하지 않는다.

     - EBP는 함수가 호출되었을 때 ESP의 값을 저장하고 있다가, 함수가 리턴하기 직전에 다시 ESP에 값을 되돌려줘서 스택이 깨지지 않도록 한다.(Stack Frame 기법)

     - 추가적으로 ESI와 EDI는 특정 명령어들(LODS, STOS, REP MOVS 등)과 함께 주로 메모리 복사에 사용된다.







    도움이 되셨다면 아래

    공감 버튼 한번씩 눌러주세요.^^

    댓글

Designed by Tistory.