관리 메뉴

IT창고

System 레지스터(Register) 본문

보안/System

System 레지스터(Register)

방구석여포 2018. 1. 16. 22:40

CPU의 레지스터에 대해 알아보겠습니다.


레지스터는 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억장치로 고속 기억장치라고 불리며 용도별로 여러개의 레지스터가 존재합니다.


컴퓨터의 기억장치의 입출력이 빠른 순서

레지스터 >> 주기억장치  >> 보조기억장치


1. 범용 레지스터 

범용 레지스터는 본 목적외에 다용도로 활용할수있는 레지스터로 레지스터의 크기에 따라 이름이 달라집니다.


4byte 레지스터

EAX ( Extended Accumulator Register )

EBX ( Extended Base Register )

ECX ( Extended Counter Register )

EDC ( Extended Data Register )


위의 레지스터외에도 1,2,8byte 레지스터가 있습니다.

1byte AH, AL, BH, BL, CH, CL, ......

2byte AX, bX, ........

8byte RAX( Rex Extended Accumlator Register ), RBX, RCX, ...


크기에 따라 명칭이 바뀌지만 모두 범용레지스터입니다.


2. 포인트 레지스터

포인트 레지스터는 주소를 나타내는 레지스터로 사용용도가 정해진 레지스터입니다. 용도가 정해져있기 때문에 사용하게 되면 오류가 날수있습니다.


ESI ( Extended Source Index ) : 문자열 복사에 사용되는 레지스터

EDI ( Extended Dst Index ) : 문자열 복사에 사용되는 레지스터 ( 중요성이 떨어져서 꼭 필요하면 다른 용도로 사용가능합니다. )


EBP ( Extended Base Index )

ESP ( Extended Stack Index )

EIP ( Extended Instruction Index )


3. 플래그 레지스터 

- EFLAGS 

프로세스에 대한 상태 정보를 가지며 32개의 bit로 실시간 표현이 가능합니다.


4. 세그먼트 레지스터

- CS, DS, SS, ES, ....


이러한 레지스터를 사용해서 어셈블리어로 프로그래밍을 할수있습니다. 단 레지스만으로는 프로그래밍이 불가능합니다.

https://software.intel.com/en-us/articles/intel-sdm 사이트에 가면 인텔 CPU의 기본구조에서 명령어를 볼수있는 PDF가 있습니다.


간단히 명령어를 사용해서 프로그래밍을 해보겠습니다.


그전에 메모리에 대해 알고 가겠습니다.

데이터의 저장방식은 크게 두가지가 있는데 메모리를 이용하는것과 스택을 이용하는 방식이 있습니다. 

메모리의 영역에 .data는 초기화된 데이터 메모리 영역이고 .bss가 비초기화된 메모리 영역입니다. .bss영역의 메모리는 직접 초기화를 시켜줘야 합니다.


mov명령어에 대해 알아보겠습니다.

mov는 데이터의 이동 C언어로 보면 int a = 0; 에서 =에 해당하는 역활을 합니다.



간단한 어셈블리어 프로그램을 만들었는데 mov를 이용하여 eax레지스터에 10의 값을 주고 push로 함수인자를 넣어주어 10을 출력했습니다.

push eax를 하지 않을 경우 주소값이 나오기 때문에 꼭 push해야합니다.


이번에는 .bss영역을 활용해서 mov를 사용해보겠습니다.


mov명령어의 피연산자가 둘다 올수없습니다. 이럴 경우 에러가 나는데 a는 주소값이기 때문에 [] 브라켓에 담아 줘야합니다.

[]를 사용하면 C언어에서 *포인터와 같은 역활을 하게 됩니다.



a에 []를 담아주고 데이터 타입에 맞는 형태를 입력해주면 됩니다.


실행해보면 값이 정상적으로 확인되지 않았습니다. 그 이유는 push로 함수를 넣어줄때 데이터타입과 []을 사용하지 않았기 때문입니다.


다시 제대로 입력해서 실행해보겠습니다.


이번에는 제대로 된 값이 나온걸 확인할수있었습니다!



'보안 > System' 카테고리의 다른 글

System 명령어와 분기문  (0) 2018.01.17
System 어셈블리어 사칙연산  (1) 2018.01.17
System 어셈블리어  (0) 2018.01.12
System 컴파일  (0) 2018.01.11
System Hacking 실습환경 구성  (0) 2018.01.10
Comments