범용CPU레지스터

EAX : 산술 연산을 수행하기 위해 사용되거나 함수의 리턴 값을 전달하기 위해 사용된다.


EDX : 데이터 레지스터로 기본적으로 EAX 레지스터의 확장 개념으로 사용된다. 즉 곱하기나 나누기 같이 복잡한 연산을 위해 추가적으로 데이터를 저장할 때 사용된다. 또한 범용 목적의 저장소로도 사용이 된다.


ECX : 카운터 레지스터라 불리며, 반복적으로 수행되는 연산에 주로 사용된다. 반복 연산에서는 문자열을 저장하거나 카운트를 세는 작업이 수행 된다. 중요한점은 ECX는 값을 감소시키면서 카운트를 센다는 점이다.

           : count = 0

           While count < 10:

           Print “Loop num : %d” % count

           Count+=1

에서 위 코드를 어셈으로 변환해보면 카운트 값을 나타내는 ECX의 값이 첫번째 반복 연산을 수수행할 때 10이고, 두번째에는 9로 감소한다는 것을 알수 있다.


ESI : EDI와 같이 데이터를 처리하는 반복문에서 효과적으로 데이터를 처리하기 위해 사용된다. ESI는 데이터 연산을 위한 Source Index를 나타내거나 입력 데이터 스트림의 위치를 나타낸다.

EDI : 데이터 연산의 Destination index(목적지)를 나타내거나 데이터 연산의 결과가 저장 되는 위치를 나타내는데 사용된다. ESI는 읽기위해 사용되고 EDI는 쓰기 위해 사용된다고 생각하면 된다.


ESP : Stack pointerEBP와 함께 함수 호출과 스택연산에 쓰인다. 힘수기 호출 될 때 먼저 함수에 전달되는 파라미터가 스택에 PUSH되고 그 다음에는 리턴 주소가 스택에 PUSH된다. ESP 레지스터는 스택의 가장 높은 주소를 가리킨다. 따라서 함수 호출시 ESP 레지스터는 리턴 주소를 가리킨다.

EBP : Base pointer, EBP 레지스터는 호출 스택의 가장 낮은 위치를 가리키는데 사용된다.


EBX : 특정한 목적이 없는 레지스터로 추가적인 저장소로 이 레지스터를 사용한다.

EIP : 현재 실행 중인 명령의 주소를 가리킨다. CPU가 바이너리 코드를 실행시킴에 따라 EIP 레지스터는 CPU가 현재 어느 코드를 실행중인지 나타내기 위해 계속적으로 코드의 주소를 갱신한다.

'Reversing > Theory' 카테고리의 다른 글

x86 Instruction Set Reference  (0) 2015.07.29
RVA to RAW 쉽게 생각해보기  (1) 2015.03.20
Assembly Basic Commands  (0) 2015.01.23
PE File Format 0x04  (0) 2015.01.13
IDA PRO 단축키  (0) 2015.01.13