x86 CPU 레지스터 조사

레지스터

Register (레지스터) : CPU 내부에 존재하는 다목적 저장공간. CPU 내부에 있기에 고속으로 데이터 처리가 가능합니다.
x86 레지스터란 인텔의 x86 아키텍쳐 CPU에서 사용되는 레지스터를 말합니다.

종류와 역할

모든 레지스터들은 32비트 크기로 확장되어 있으며 레지스터명 앞의 E는 확장을 의미합니다.
(E를 빼면 (EAX -> AX) 하위 16비트에 접근가능)

범용

레지스터설명
EAX누적연산기. 각종 산술연산에 사용된다.
함수의 리턴값을 저장하는 용도로 사용된다.
연산시에 다른 레지스터보다 속도가 빠르다.
ECX카운터이다.
반복문 등의 사용시, 반복횟수를 센다.
EDX데이터이다.
일시적으로 데이터를 기록한다.
EBX베이스이다.
특정 메모리를 가르키는 포인터로, 간접 주소연산에 사용한다.

주소 - 인덱스

레지스터설명
ESI데이터를 편집하거나, 복사 할 때 데이터의 주소를 저장한다.
EDI데이터를 복사 할 때 목적지의 주소를 저장한다.

주소 - 포인터

레지스터설명
ESP스택의 크기를 조정할 때 사용하는 레지스터. (스택의 가장 아랫부분)
EBP스택 프레임의 시작 지점주소가 저장된다. (스택의 가장 윗부분)
EIP다음에 실행할 명령어가 존재하는 메모리 주소가 저장된다.

세그먼트

레지스터설명
CS코드 영역의 시작주소
DS데이터 영역의 시작주소
SS스택 영역의 시작주소
ES스트링 연산시 사용된다
FS여분의 세그먼트 레지스터이다.
GS여분의 세그먼트 레지스터이다.

EIP와 관련하여

우선 위의 표에 나와있듯이 다음에 실행할 명령어가 존재하는 메모리 주소가 저장되는 레지스터입니다.
현재 실행중인 명령을 끝낸 후에, EIP에 저장된 주소에 있는 명령을 실행하게 됩니다.
기본적으로 이 값에는 접근할 수 없고, 한 명령이 실행되면 CPU 스스로 EIP를 증감해 다음 실행되어야 할 명령을 저장합니다.
하지만, 만약 EIP를 어떻게든 조작하는게 가능해진다면, 원하는 명령을 실행시켜버릴 수 있을 것입니다.

Total views

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×