CPU Register란?
: CPU내부에 존재하는 다목적 공간
RAM은 물리적 제약에 의해 비교적 저속이나,
Register는 CPU와 한 몸이기 때문에 고속이다.
( Register >> Cache >> RAM >> HDD ) //컴구조 시간에 배운 기억이;;
레지스터의 종류는 많지만, 우선은 기본적으로 알아야할 레지스터부터 알아본다.
*추후 control, memory, debug Register들의 공부도 필요하게 될 것같다.
Basic Program execution Register - General Purpose Registers ( 32bit * 8개 ) //범용레지스터
- Segment Registers ( 16bit * 6개 )
- Program Status Control Registers ( 32bit * 1개 )
- Instruction Pointer ( 32bit * 1개 )
먼저 General Purpose Registers에 대해 알아보면,
각각의 크기는 32bit ( 4 byte )이며, 보통의 용도는 상수/주소 등을 저장하는데 쓴다.
특정 어셈블리 명령어에서 특정레지스터를 조작하기도하며, 특정레지스터는 특수용도로 사용된다.
그림과 같이 범용레지스터는
EAX ( Accumulator Operands and result data )
EBX ( Pointer to data in the DS Segment )
ECX ( Counter for String and Loop Operations )
EDX ( I/O Pointer )
EBP ( Pointer to data on the Stack )
ESI ( Source Pointer for String Operations )
EDI ( Destination Pointer for string Operations )
ESP ( Stack Pointer ) 로 구성이 되어있다.
그림에서 반이 나누어진 것을 볼수 있는데,
현재 사용되고있는 32bit기준으로 레지스터가 확장되었기 때문이다.
예전에는 16bit를 사용 하였기때문에 레지스터의 용량 또한 16bit였고, 여기서
확장된(Extend)의미를 붙여 각 레지스터에 E가 붙게 되었다.
새로 레지스터를 만들지 않고 확장시킨이유는 예전과 호환을 위해서라고 한다.
각 범용레지스터의 사용 용도는
EAX ~ EBX레지스터들은 주로 산술연산 (add, sub, xor, or 등) 명령어에서 상수/변수 값의 저장용도로
많이 사용되며 특별히 EAX와 ECX는 다른 특정 용도가 있다.
eax -> 함수 리턴값에 사용 ecx-> 반복loop 카운트수 저장
ESP는 스택 메모리 주소를 저장하고 있어서, 스택의 PUSH, POP에 따라 값이 변한다.
EBP는 함수 호출시 그 순간의 ESP를 저장하여 리턴 직전에 ESP값을 되돌려서 Stack이 깨지지않게 하는 역할을 한다.
나중에 나오지만 이것을 Stack Frame 기법이라고 한다.
ESI와 EDI는 특정 명령어들과 함께 주로 메모리 복사에 사용된다.
출처 : 리버싱 핵심원리 (이승원 저)
'Study > ETC' 카테고리의 다른 글
실전 악성코드와 멀웨어 분석 Lab03_03.exe (0) | 2014.09.01 |
---|---|
실전 악성코드와 멀웨어 분석 Lab03-02.dll (0) | 2014.08.29 |
실전 악성코드와 멀웨어 분석 Lab03-01.exe (0) | 2014.08.11 |
code engn 04 (0) | 2014.04.04 |
같은 네트워크 망에 접속한 아이피어드레스 서치하기! (2) | 2013.06.21 |