티스토리 뷰

이 블로그는 단지 제 개인 공부를 정리해둔 것입니다.

제가 올린 내용 중 잘못된 부분이 있으면 지적해주시면 감사하겠습니다.

꾸벅

 

먼저 구글에서 검색한 레지스터에 대해 알아보겠습니다.

 

레지스터

위키백과, 우리 모두의 백과사전.

레지스터 (register, resistor)는 다음을 의미한다.

위와 같다고 합니다. 처음에 뭐지라는 생각이 듭니다. 레지스터라는 것들이 총 6개가 보이는데 그 중 가장 컴퓨터 내부적으로 관련이 있을것 같은 프로세서 레지스터를 클릭해보았습니다.

 

 

프로세서 레지스터

프로세서 레지스터(영어: processor register, 순화 용어: 기록기) 또는 단순히 레지스터는 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소이다. 일반적으로 현재 계산을 수행중인 값을 저장하는 데 사용된다. 대부분의 현대 프로세서는 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리한 후 그 내용을 다시 레지스터에서 메인 메모리로 저장하는 로드-스토어 설계를 사용하고 있다.

레지스터는 메모리 계층의 최상위에 위치하며, 가장 빠른 속도로 접근 가능한 메모리이다. 최신 프로세서에서 레지스터는 대개 레지스터 파일로 구현되지만, 과거에는 플립플롭, 마그네틱 코어, 박막 필름 메모리 등으로 구현되기도 했다.

 

 

라고 합니다. "계산을 수행중인 값을 저장하는데 사용된다." 단지 변수라는 생각이 듭니다.

제가 공부하는 책의 내용을 읊어 보자면 원론적으로는 실제 변수와는 개념 자체가 완전히 다릅니다. 쉽게 생각하기 위해서 변수라 생각하는 것이 좋겠습니다.

다만 CPU가 사용하는 변수여서 개수가 몇개 안되고, 그래서 메모리의 힘을 빌려서 연산을 시작하는 것이라고 생각하는 것이 좋습니다.

레지스터는 EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP로 총 8개가 있습니다.

이제 각각의 레지스터가 어떤 역할을 하는지 알아보도록 하겠습니다.

 

 

 

#EAX

 

EAX는 산술 계산을 하며, 리턴값을 전달합니다. 이 말 대신에 쉽게 생각하면 가장 많이 쓰는 변수라고 생각을 하는게 좋을것 같습니다. 그리고 변수라서 당연히 계산식에 사용되며, 리턴값으로도 EAX에 기록이 됩니다. A 의 의미는 Accumulator입니다.

 

 

#EDX

 

이것 역시 일종의 변수라 생각하는게 좋을것 같습니다. EAX 역할이 같으나, 리턴값을 반환하지 않습니다. 각종 연산에 쓰이며, 가끔은 좀더 복잡한 연산이 필요하면, 덤으로 사용되기도 합니다.  D는 Data.

 

 

#ECX 

 

C의 의미는 Count 라 설명을 드리면 이해하기가 쉬울듯 합니다. 즉 루프문을 수행할 떄 카운팅하는 역할을 합니다. ECX는 미리 루프를 돌 값을 넣어놓고, 감소시키며, 루프 카운터가 0일 될 때 까지 카운팅합니다. 예를 들면

 

for (int i =0; i<100 ; i++){

........................

이라 하면 ecx에 해당하는 변수는 i이고 ecx가 100부터 루트 한번을 돌때 마다 eax--을 수행하게 됩니다.
 

 

#EBX

 

별거 없습니다. 일반적인 데이터 레지스터로, 원래는 16비트 모드에서는 포인터로 사용했었습니다. 

 

 

#ESI, EDI

 

역시 마찬가지로  CPU가 사용하는 변수의 일종이라 생각하면 됩니다. 다만, EAX ~ EDX 주로 연산에 사용되고, ESI는 문자열이나 각종 반복 데이터를 처리 또는 메모리를 옮기는 사용됩니다. 보통 설명으로는 ESI는 시작지 인덱스 (Source Index), EDI는 목적지 인덱스 (Destination Index)로 사용됩니다.

 

쉽게 생각해자면, ESI에서 메모리를 읽어서, EDI로 복사합니다. 


'Reversing > Reverse Engineering' 카테고리의 다른 글

abex’ crackme #1  (0) 2015.12.26
OllyDbg를 이용한 스택 공부하기  (0) 2015.12.23
PACKING  (0) 2015.12.21
함수의 호출 규약  (0) 2015.12.21
어셈블리어 기본 명령어  (0) 2015.08.04
댓글