범용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 pointer로 EBP와 함께 함수 호출과 스택연산에 쓰인다. 힘수기 호출 될 때 먼저 함수에 전달되는 파라미터가 스택에 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 |