본문 바로가기

Computer Engineering/System

[펌글] CPU Register(레지스터) 32bit

레지스터 : 컴퓨터의 중앙 처리 장치(CPU) 내에 있는 소규모의 데이터 기억 장치입니다. 
연산 처리 장치와 레지스터간은 CPU 내부 버스(bus)가 연결해줍니다.

예전엔 ax, bx, cx, dx 이라고 불렸던 레지스터들이 있었습니다. 이는 16bit에 알맞게 설계된 구조를 가진 레지스터들로 32bit CPU가 등장한 후로는 Extend라는 접두어를 붙여 eax, ebx, ecx, edx 라고 불립니다.

= EAX =
Extend Accumulator, 즉 누산기 레지스터라고 불립니다. 
거의 모든 산술 연산에 사용되며(주로 곱셈이나 나눗셈 연산), 함수의 반환값이 들어가기도 합니다. 참고로 Win32 API Function들은 모두 API Function의 반환값을 EAX에 저장한 후 반환합니다.

= EBX =
Extend Base, 즉 인덱스(또는 베이스) 레지스터라고 불립니다. 
주로 주소 지정을 확장하기 위해 index로 사용되는 레지스터입니다.

= ECX =
Extend Counter, 즉 카운터 레지스터라고 불립니다.
주로 루프의 반복 횟수, 좌우방향의 쉬프트 수를 기억합니다.
루프를 돌 때마다 ecx를 1씩 감소시키면서 참조 카운트로 사용합니다.

= EDX =
Extend Data, 즉 데이터 레지스터라고 불립니다.
곱셈, 나눗셈에서 EAX와 같이 쓰이며 부호 확장 명령 등에 쓰입니다.

= EBP =
Extend Base Pointer의 약자로 함수로 전달되는 파라메터나 지역변수를 나타낼때 기준이 되는 레지스터입니다. 참고로 말씀드리자면 파라메터는 EBP+(Offset), 지역변수는 EBP-(Offset)로 나타냅니다. 
또한 esp 레지스터와 함께 사용되어 stack frame를 형성하기도 하는데요, stack frame 기법은 ebp 레지스터가 함수가 call 될 때의 esp를 저장하고 있다가(mov %esp, %ebp) 모든 루틴이 끝나고 함수가 리턴할 때 다시 esp값을 돌려주어 (mov %ebp, %esp) 스택 형성에 문제가 생기지 않도록 하는 기법입니다. 

= ESP =
Extend Stack Pointer의 약자로 intel 80386 이상 프로세서에서 등장한 레지스터입니다. 이 레지스터는 스택 메모리의 최상위 주소를 저장하고 있습니다.

= ESI / EDI =
각각 Extend Source ~, Extend Destination ~ 의 약자로써  REP, STOS, LODS 등의 명령어 등과 함께 사용되는 경우가 많으며, 데이터 카피시 각각 소스, 데스티네이션이 저장됩니다.

= EIP =
Extend instruction pointer의 약자로, cpu가 현재 코드 세그먼트에서 다음에 실행할 명령의 오프셋을 저장하는 32bit 레지스터입니다. 하나의 명령이 처리되면 그 명령의 길이만큼 cpu는 eip를 증가시키며, 소프트웨어에서 직접적으로 액세스 될 수 없고 interrupt, exception 등을 통해 간접적으로 제어됩니다.(이 값을 직접적으로 변경할 수 없습니다)


▲출처 : SecuRex0 님 블로그 

= 레지스터 추가 자료 =

 
출처 : Maj3sty 님 블로그

'Computer Engineering > System' 카테고리의 다른 글

[ESPC2] 0x05 BOF  (0) 2011.12.21
[ESPC2] 0x04 Return Address  (0) 2011.12.19
[System Security] push ebp / mov ebp,esp  (0) 2011.12.18
[ESPC2] 0x03  (0) 2011.12.17
[ESPC2] 0x02  (0) 2011.12.16