레지스터에 대해서는 두 세번정도로 나누어 포스팅을 할 예정입니다.

레지스터 자체가 굉장히 기본이 되는 부분이기도 하고, 스택등과 더불어 툴을 쓸 때 가장 많이 볼 부분이 그 부분이기 때문입니다.

이번 포스팅에서는 레지스터가 무엇인지 알아보는 시간을 갖도록 하겠습니다.


레지스터(Register)란?

 레지스터는 CPU에 존재하는 다목적 저장 공간 입니다. 우리가 흔히 메모리라고 이야기하는 RAM(Random Access Memory,이하 램)와는 조금 다른 성격을 가집니다.

레지스터와 램은 데이터와 명령어를 저장하는 점에서는 동일한 성격을 지닙니다. 다만 램은 CPU와 한몸이 아니라 하나 또는 그 이상의 마이크로 칩으로 이루어져 있으며, CPU와 물리적으로 가까운곳에 위치합니다.

그래서 램에 있는 데이터에 접근(Access)하기 위해서는 물리적으로 먼 길을 돌아가기 때문에 시간이 오래 걸리게 되는데 반해 레지스터는 CPU와 함께 붙어있기 때문에 고속으로 데이터를 처리 할 수 있습니다.


레지스터는 왜 알아야 하는가?

 지금 이 글을 포스팅하는 저를 포함한 많은 리버스 엔지니어링을 공부하는 사람들은 초급단계로 디스어셈블을 통한 어셈블리 명령어를 해석하게 됩니다.

그런데 이 어셈블리 명령어라는 녀석들은.. 대부분 레지스터를 조작하고, 내용을 검사하는 일을 합니다. 즉, 레지스터에 대해 알지 못하면 리버싱을 할 수 없다는 소리가 됩니다. 물론 볼 때 마다 하나하나 찾아가며 하는 방법도 있겠습니다만.. 효율적인 면이나 능률적인 면에서 보면 공부해서 아는 것이 육체적으로나 정신적으로나 큰 도움이 될거라고 생각 됩니다.


IA-32(Intel Architecture 32bit)는 수많은 기능을 제공하며, 또 그만큼 많은 수의 레지스터를 보유하고 있습니다. 앞으로 이어질 세개의 포스팅에서는 오늘 간단하게 언급하고 넘어갈 레지스터인 Basic program execution register에 대해 이야기 할 예정입니다.

물론 이외에도 Memory Management Register, Machine specific register, Control register 등이 존재하지만.. 이는 향후에 좀더 깊게 설명할 때 다시 언급하기로 한다.


다음 포스팅에 설명할 Basic program execution register의 4개 그룹을 간단하게 언급하고 다음 포스팅에서 뵙도록 하겠습니다.

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

 - Segment Register(세그먼트 레지스터)

 - Program Status and Control Register(프로그램 상태 및 컨트롤 레지스터)

 - Instruction Pointer(명령어의 주소)


다음 포스팅에서는 범용 레지스터에 대해서 포스팅 할 계획입니다.

Posted by Latte_
,