ABOUT ME

-

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

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

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


    관련 글

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

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

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


    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.3 Program Status and Control Register(프로그램 상태와 컨트롤 레지스터)

      - EFLAGS : Flag Register

      - 플래그(Flag) 레지스터의 이름은 EFLAGS이며 32비트(4바이트) 크기이다.

      - 각 비트는 1 또는 0의 값을 가지는데, 이는 On/Off 혹은 True/False를 의미한다.

      - 일부 비트는 시스템에서 직접 세팅하고, 일부 비트는 프로그램에서 사용된 명령의 수행 결과에 따라 세팅된다.



    ◈ Zero Flag(ZF)

      - 연산 명령 후에 결과 값이 0이 되면 ZF가 1(True)로 세팅된다.

    ◈ Overflow Flag(OF)

      - 부호 있는 수(Signed integer)의 오버플로가 발생했을 때 1로 세팅된다. 그리고 MSB(Most Significant Bit)가 변경되었을 때 1로 세팅된다.

    ◈ Carry Flag(CF)

      - 부호 없는 수(unsigned integer)의 오버플로가 발생했을 때 1로 세팅된다.


     2.4 Instruction Pointer

      - EIP : Instruction pointer

      - Instruction Pointer는 CPU가 처리할 명령어의 주소를 나타내는 레지스터이다.

      - 크기는 32비트(4바이트)이다.

      - CPU는 EIP에 저장된 메모리 주소의 명령어(instruction)를 하나 처리하고 난 후 자동으로 그 명령어 길이만큼 EIP를 증가시킨다.

      - EIP를 변경하고 싶을 때는 특정 명령어(JMP, Jcc, CALL, RET)를 사용하거나 인터럽트(interrupt), 예외(exception)를 발생시켜야 한다.







    도움이 되셨다면 아래

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

    댓글

Designed by Tistory.