저번 포스팅에 이어서 이번에는 Basic Program Excution Register (BPER) 을 조금 더 심화적으로 알아보도록 할겁니다.
1. Basic Purpose Register - 범용레지스터 (32 bit, 8개)
- 산술연산 (ADD, SUB, XOR , OR 등) 명령어에서 상수 / 변수의 값을 저장하는 용도로 사용
1-2. 종류
- EAX : Accumulator for operands and result datas -> 일반적으로 함수의 리턴값에 사용 - EBX : Pointer to data in the DS segment - ECX : Counter for String and Loop operations -> 반복문 명령어에서 반복 카운터로 사용 - EDX : I/O Pointer
지금현재 8개의 레지스터중 4개를 살펴보았습니다. (그럼 나머지 4개는?)
4개는 아래와 같으며 4개씩 따로 살펴보는 이유는 주로 연산과 관련된 레지스터와 메모리의 주소를 저장하는
포인터로 사용되는 레지스터이기 때문에 기능적인 부분에서 차이가 있습니다.
1-3. 종류
- EBP : Pointer to data on the stack (in the SS segment)
함수가 호출되었을때 ESP를 저장하고 있다가 함수가 리턴하기 직전에 ESP에 값을 되돌려줌
- ESI : Source Pointer for String operands
- EDI : Destination Pointer for String operands
- ESP : Stack Pointer (in the SS segment)
스택 메모리의 주소
2. Segment Register - 세그먼트 레지스터 (16 bit, 6개)
- 세그먼트라는 메모리의 한 영역의 주소를 지정하는 레지스터
- 세그먼트 : 프로그램에 정의된 코드나 데이터 및 특정 영역을 저장하는 곳
2-2. 종류
보시면 여러가지의 세그먼트 들이 존재합니다만, 처음에 중요하게 살펴봐야 할 세그먼트 레지스터는 DS 입니다.
먼저 종류들을 살펴보겠습니다.
CS - Code Segment 실행될 기계 명령어를 포함하는 영역
- EIP가 있기때문에 직접적으로 볼 일이 많이 없음
DS - Data Segment 프로그램의 정의된 데이터나 상수, 작업영역을 포함
- 레지스터에서 프로그램에 저장된 데이터나, 상수, 변수 등을 읽어올때 접근
SS - Stack Segment 스택 세그먼트
- 컴파일 과정에서 데이터가 스택에 쌓이게 되는데EBP / ESP가 있기때문에 볼 일이 많지 않음