본문 바로가기

정보보호/Riversing

IA-32 Register

IA-32(Intel architecture 32bit)


1. CPU Register

 1.1 Basic program execution registers

        - General Purpose Registers (32bit, 8개)

        - Segment Registers (16bit, 6개)

        - Program Status and Control Register (32bit, 1개)

        - Instruction pointer(32bit 1개)


1.1.1 General Purpose Registers 

       -  보통 상수/주소 등을 저장할때사용

       - 각 레지스터는 하위 호환성을 위해 몇가지 구획으로 나뉨

          EAX의 예를 들면 EAX : 0~31(32bit)

                                  AX : 0~15(EAX의 하위16bit)

                                  AH : 8~15(AX의 상위 8bit)

                                  AL : 0~7(AX의 하위 8bit)

       - 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

          * 위의 네가지는 주로 산술연산에 사용

          * ECX는 loop의 카운터,  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)

          * 위 네가지는 주로 메모리 주소를 저장하는 포인터

           

1.1.2 Segment Registers

       메모리를 조각내어 각 조각마다 시작주소, 범위, 접근 권한 등을 부여하여 메모리를 보호하는 기법

       - CS : Code Segment (16bit)

       - SS : Stack Segment (16bit)

       - DS : Data Segment (16bit)

       - ES : Extra(Data) Segment (16bit)

       - FS : Data Segment (16bit)

          * SEH(Structured Exception Handling), TEB(Thread Environment Block),

             PEB(Process Environment BlocK) 등의 주소 계산 할때 사용

       - GS : Data Segment (16bit)


1.1.3 Program Status and Control Register

       - EFLAGS : Flag Register (32bit)

         각 비트가 0 또는 1 값을 가지면 의미있는 플래그의 역할을함

         - ZF(Zero Flag) : 연산 명령 후 결과가 0 이면 ZF가 1로 세팅

         - OF(Overflow Flag(OF) : signed integer의 오버플로우가 발생했을 때 1로 세팅,

                                               MSB(Most Significat Bit)가 변경되었을때 1로 세팅

         - CF(Carry Flag) : unsigned integer의 오버플로우가 발생했을때 1로 세팅


1.1.4 Instruction Pointer

       - EIP : Instruction pointer (32bit)

                 CPU가 처리할 명령어의 주소를 나타냄

                * 값을 직접 변경할 수 없어 JMP, Jcc, CALL, RET 등 특정 명령어를 사용하거나, 

                   인터럽트, 예외 등을 발생시켜야함

2. Stack

    로컬변수 저장, 함수 파라미터 전달, 복귀주소 저장 등 다양한 용도로 사용

    FILO(First In Last Out) 구조

    스택은 높은 주소에서 낮은 주소 방향으로 자람.

    

'정보보호 > Riversing' 카테고리의 다른 글

Stack Frame  (0) 2013.09.06
올리디버거 기본 사용법  (0) 2013.09.05