리버싱(Reverse Code Engineering)을 하게 되면 주로 접하게 되는 것이 어셈블리어다. 어셈블리어는 CPU에 따라 차이가 있지만 가장 많이 사용하는 것이 Intel의 IA-32라고 볼 수 있다. 어셈블리어를 조금이라도 분석하기 위해서는 아래 레지스터들에 대한 내용을 반드시 숙지해야 한다.
EAX: 누산기에 해당하며 대부분의 연산들이 수행된다.
ECX: 개수, 횟수 등을 저장하는 카운터로 주로 사용된다.
EDX: 누산기의 확장으로 누산기와 관련된 연산에서 사용된다. EDX와 EAX를 합쳐 64비트 연산을 하는 경우가 대표적이다.
EBX: 일반적인 데이터 레지스터로, 원래 16비트 모드에서는 포인터로 사용했다.
ESP (stack pointer): 스택의 꼭대기 주소를 담는다.
EBP (base pointer): 현재 스택 프레임의 주소를 담으며, 일반적인 목적으로 쓰기도 한다.
ESI (source index): 문자열 연산에서 사용되는 원본 주소를 담는다.
EDI (destination index): 문자열 연산에서 사용되는 목적 주소를 담는다.
EIP (instruction pointer): 현재 실행되는 명령의 주소를 담는다.
IA-32는 16Bit를 기준으로 한다. 그래서 32Bit 환경임에도 WORD의 크기가 2Byte다. 32비트로 넘어오면서 16Bit 환경과의 호환을 위해서 확장의 의미로 레지스터 앞에 E(Extend)를 붙였다. 그렇기 때문에 2Byte(16Bit) 만큼 접근하는 것도 가능하다.(AX, BX, CX, DX) 그중에서도 위 4개 레지스터는 H(High), L(Low)로 1Byte(8Bit) 씩 접근하는 것도 가능하다.
'IT' 카테고리의 다른 글
Ventura 대신 Monterey 설치하기 (0) | 2022.10.29 |
---|---|
json 파일을 excel 파일로 변환하기 with Python (0) | 2022.07.13 |
한글 깨지지 않는 Redis 뷰어 추천 (0) | 2022.07.13 |
64bit 멀티코어 OS개발 환경 구축 (0) | 2018.01.02 |
[MFC] 64bit에서 32bit MySQL ODBC 연동 방법 (0) | 2017.12.24 |