-
IA-32 Register 기본 설명(1/3)IT/리버싱 핵심원리 2017. 11. 23. 14:30
공부를 시작하기에 앞서 본 글은 '리버싱핵심원리', 이승원 저자, 인사이트 를 참고했음을 밝힙니다.
또한 공부하는 입장에서 정리를 목적으로 작성하였기때문에 틀린 정보가 있을수도 있다는 것을 알려드립니다.
관련 글
1. CPU 레지스터란?
- 레지스터(Register)란 CPU 내부에 존재하는 다목적 저장 공간이다.
- CPU가 RAM에 있는 데이터를 엑세스하는 시간이 오래 걸리지만 레지스터는 데이터를 엑세스하는 시간이 빠르다.
2. Basic program execution registers- General Purpose Registers(32비트 - 8개)- Segment Registers(16비트 - 6개)- Program Status and Control Register(32비트 - 1개)- Instruction Pointer(32비트 - 1개)2.1 General Purpose Registers(범용 레지스터)
- IA-32에서 각각의 범용 레지스터들의 크기는 32비트(4바이트)
- 보통 상수/주소 등을 저장할 때 주로 사용되며, 특수한 용도로도 사용된다.
[그림 2.1.1] 범용 레지스터
출처 : http://www.intel.co.kr/content/www/kr/ko/architecture-and-technology/64-ia-32-architectures-software-developer-manual-325462.html
· EAX : Accumulator for operands and results data
· EBX : Pointer to data in the DS segment
· ECX : Counter for string and loop operations
· EDX : I/O pointer
- 위 4개의 레지스터들은 주로 산술연산(ADD, SUB, XOR, OR 등) 명령어에서 상수/변수 값의 저장 용도로 많이 사용된다.
- 추가적으로 ECX는 반복문 명령어(LOOP)에서 반복 카운트(loop count)로 사용된다.(루프 돌 때마다 ECX 1씩 감소)
- 추가적으로 EAX는 일반적으로 함수 리턴 값에 사용한다. 모든 Win32 API 함수들은 리턴 값을 EAX에 저장한 후 리턴된다.
· EBP : Pointer to data on the stack (in the SS segment)
· ESI : source pointer for string operations
· EDI : destination pointer for string operations
· ESP : Stack pointer (in the SS segment)
- 위 4개의 레지스터들은 주로 메모리 주소를 저장하는 포인터로 사용한다.
- ESP는 스택 메모리 주소를 가리킨다. 프로그램의 흐름에 중요한 영향을 미치는 레지스터이기 때문에 다른 용도 사용하지 않는다.
- EBP는 함수가 호출되었을 때 ESP의 값을 저장하고 있다가, 함수가 리턴하기 직전에 다시 ESP에 값을 되돌려줘서 스택이 깨지지 않도록 한다.(Stack Frame 기법)
- 추가적으로 ESI와 EDI는 특정 명령어들(LODS, STOS, REP MOVS 등)과 함께 주로 메모리 복사에 사용된다.
도움이 되셨다면 아래
공감 버튼 한번씩 눌러주세요.^^
'IT > 리버싱 핵심원리' 카테고리의 다른 글
스택 프레임(Stack Frame) 실습 - stackframe.exe (0) 2017.11.23 스택 프레임(Stack Frame) 에 대해 알아보자 (0) 2017.11.23 스택(Stack) 이란 무엇인가? (0) 2017.11.23 IA-32 Register 기본 설명(3/3) (0) 2017.11.23 IA-32 Register 기본 설명(2/3) (0) 2017.11.23 댓글