저희가 리버싱을 배울 때에는 컴퓨터의 구조적인 면을 더 자세하게 알아야하는데요. 이때 레지스터에 대한 기초적인 지식이 도움이 됩니다. 레지스터는 CPU에서 명령을 처리할 때 참조되는 데이터 저장 장소로 RAM에 있는 데이터들에 직접, 임의적인 접근을 할 수 있게 해줍니다. CPU에서는 레지스터가 가장 가까운 위치에 있어 RAM, 하드디스크 보다 빨리 접근할 수 있습니다.
1. 8개의 32bit 범용 레지스터
EAX : 함수의 리턴값을 저장하거나 산술연산을 하는 레지스터
EBX : 특정 주소의 지정을 위해 사용하는 레지스터
ECX : 명령어가 반복 수행될 때 횟수를 저장하는 레지스터
EDX : 큰 수의 곱, 나눗셈 등의 연산시 EAX 레지스터와 함께 사용
EDI : 문자열 복사, 비교 시에 목적지 문자열의 주소를 저장하는 레지스터
ESI : 문자열 복사, 비교 시에 소스 문자열의 주소를 저장하는 레지스터
ESP : 명령어 수행시 스택 위치를 저장하는 레지스터
EBP : 함수 인자, 스택 변수에 접근하기 위해 사용하는 레지스터
2. 6개의 16bit 세그먼트 레지스터
CS : 코드 세그먼트를 가리킴
SS : 스택 세그먼트를 가리킴
DS, ES, FS, GS : 데이터 세그먼트를 가리킴
3. EFLAGS, EPI 레지스터
- EFLAGS : 현재 프로그램의 상태나 분기문 조건 등의 검사에서 사용되는 플래그들을 모아놓은 레지스터
- EPI : CPU가 다음에 실행해야 할 명령어를 담고 있는 메모리의 주소를 저장하는 레지스터 |