ANX1-Z3R0의 불안극복(不安克服)

001. 32bit(Extended) 범용 레지스터 | anxi0 본문

HACKING/[SYSTEM HACKING] TECH-BOOK

001. 32bit(Extended) 범용 레지스터 | anxi0

ANX1Z3R0 2020. 7. 23. 15:57

CPU나 RAM에서 연산처리를 하고 데이터들이 돌아다니기 위해선 수송자 역할을 하는 레지스터가 필요하다.

범용적으로 사용되는 레지스터들은 다음과 같다.

레지스터명 역할 비트 수
EAX (Accumulator) 논리연산 수행 결과를 저장, 32bit
EBX (Base) 메모리 주소를 저장하는 용도 32bit
ECX (Counter) 반복문 카운트를 저장하는 용도(5까지 저장가능) 32bit
EDX (Data) EAX와 함께 부호확장명령 등에 쓰이고 큰수의 곱셈 또는 나눗셈 등의 연산에 쓰임 32bit
ESI (Source Index) 데이터 조작이나 복사할때 데이터의 주소가 저장됨 16bit
EDI (Destination Index) 복사 시 목적지의 주소 16bit
EBP (Base Pointer) 스택의 첫 주소 16bit
ESP (Stack Pointer)  스택의 끝 지점 주소 16bit

 

이것들이 기본 레지스터들이고,

E?X 레지스터들은 모두 다음과 같은 구조로 되어있다.

연산레지스터 구조

EAX를 예로들면, E(16bit)+AX{ AH(8bit)+AL(8bit) }이런 구조이다.

똑같이 EBX를 예로들면, E(16bit)+BX{ BH(8bit)+BL(8bit) }이런 구조이다.

 

엄밀히 말하자면 레지스터들의 역할은 일종의 약속일뿐, 어셈블리어를 사용하면서 자유롭게 용도를 바꿔도 좋지만, 혼란을 야기할 수 있으므로 저 용도를 지키는 것이 낫다.

 

ESI, EDI, EBP, ESP와 같은 레지스터들이 주소에 집착하는 이유는. 데이터 영역을 중복시키지 않고, 데이터의 값을 재사용하여 메모리 영역을 효율적으로 쓰기 위함이다. (마치 전화번호부 전체를 외우는 것이 아니라 위치만 외워놓고 책을 찾아보는 것 같이)

 

[명령 포인터 레지스터]

EIP IR Eflags가 있지만,

Eflag는 다음 글에서 알아보고,

간단히 EIP에 대해서만 알아보자.

 

EIP는 다음 명령이 실행될 주소를 저장하는 곳이다.

프로그램이 실행되고나면 일련의 프로그램된 순서에 따라 함수들이 실행되는데, 이 때 EIP주소를 사용함으로써 함수 마지막에 pop하여 다음 함수로 이동하게 한다.

 

CONCLUSION

 

한국의 텃새, 곤줄박이

1. 정말 뭐가 뭔지 이해가 안 될 수 있다.

2. 일단 암기하자.

3. 컴퓨터가 원래 그렇지

Comments