범용 레지스터인 EAX, EBX, ECX, EDX, ESI, EDI, EIP, ESP, EBP 에 대해서 알아보겠습니다.

디스어셈블 할 때 기본적으로 알아두어야 할 레지스터들입니다.


커널디버깅 중 Bugcheck Analysis 중 일부입니다.

이런식으로 BSOD 시점에 CPU의 각 레지스터 별로 어떤 내용을 담고있었는지 출력되게 됩니다.

위 그림에는 RAX, RBX....로 위에서 명시한 EAX, EBX...와 다른데 이유는 64bit에서 사용된 레지스터이기 때문입니다.


즉,

32bit : EAX, EBX, ECX......

64bit : RAX, RBX, RCX......


32bit 레지스터가 64bit에서 사용가능하도록 확장되어 명칭이 변경되었다 정도로 알아두시면 됩니다.



1. EAX (Extended Accumulator Register)

산술, 논리 연산의 결과값이 저장되는 레지스터로, 이 값을 참고하면 연산이 성공했는지, 실패했는지 알 수 있게 됩니다.


2. EBX (Extended Base Register)

베이스 레지스터, 특정 주소를 저장하고자 할 때 사용됩니다.


3. ECX (Extended Counter Register)

카운터 레지스터, 반복 명령을 사용하게 될 때 반복 카운터로 사용되는 레지스터입니다.


4. EDX (Extended Data Register)

데이터 레지스터, 부호확장에 사용됩니다. 큰 수의 곱셈, 나눗셈 등의 연산이 이루어질 때 사용됩니다.


5. ESI (Extended Source Index)

소스 레지스터, 데이터 복사시 원본 데이터의 주소가 저장됩니다.


6. EDI (Extended Destination Index)

데스티네이션 레지스터, 데이터 복사시 목적지 데이터의 주소가 저장됩니다.


7. EIP (Extended Instruction Pointer)

명령어 포인터 레지스터, 현재 명령 수행 이후 다음 수행될 명령어의 주소를 저장합니다.


8. ESP (Extended Stack Pointer)

스택 포인터 레지스터, 스택 포인터의 가장 마지막 부분 주소를 저장합니다.

Push, Pop 연산이 일어날 때마다 4바이트씩 변화합니다.


9. EBP (Extended Base Pointer)

베이스 포인터 레지스터, ESP와는 반대로 스택 포인터의 가장 첫 번째 주소를 저장합니다.

현재 사용되고 있는 스택 프레임이 변하지 않는 이상 변하지 않습니다.

Posted by 긍정왕오킹