본문 바로가기

High Level Technique/Shellcoding

IA-32, IA-64 Register

IA-32, IA-64 Register


리버스 엔지니어링과 시스템 해킹을 하면서 자주보게 되는 레지스터에 대해서 알아보도록 하겠습니다.




IA-32 Register


EAX : 더하기, 빼기, 곱셈과 나눗셈 명령에서 자동으로 사용되고 함수의 리턴 값이 저장되는 용도로 사용됩니다.


EBX : ESI, EDI와 결합하여 인덱스에 사용됩니다.


ECX : 반복 명령어 사용 시 반복 카운터로 사용됩니다. ECX 레지스터에 반복할 회수를 지정해 놓고 반복 작업을 수행합니다.


EDX : EAX와 같이 쓰이며 부화 확장 명령 등에 쓰입니다. 함수의 리턴 값이 저장되는 용도는 아닙니다.


ESI : 데이터 복사, 조작시 시작지의 주소가 저장됩니다. ESI 레지스터가 가리키는 주소의 데이터를 EDI 레지스터가 가리키는 주소로 복사하는 용도로 사용됩니다.


EDI : 복사 작업시 목적지의 주소가 저장됩니다. 주로 ESI 레지스터가 가리키는 주소의 데이터가 복사됩니다.


ESP : 하나의 스텍 프레임의 끝 지점 주소가 저장됩니다. PUSH, POP 값이 4Byte씩 변합니다.


EBP : 하나의 스택 프레임의 시작 지점 주소가 저장된다. 현재 사용되는 스택 프레임이 소멸되지 않는 동안 EBP는 변하지 않습니다.


EIP : 다음에 실행해야 할 명령어가 존재하는 메모리 주소가 저장됩니다. 현재 명령어를 실행 완료 한 후에 EIP 레지스터에 저장되어 있는 주소에 위치한 명령어를 실행합니다.


CS : 실행 가능한 명령어가 존재하는 세그먼트의 오프셋이 저장됩니다.


DS: 프로그램에서 사용되는 데이터가 존재하는 세그먼트의 오프셋이 저장됩니다.


SS : 스택이 존재하는 세그먼트의 오프셋이 저장된다.


CF : 부호 없는 연산결과과 용량보다 클 때 세트(1) 됩니다.


ZF : 연산 겨로가가 0일 때 세트(1) 되고, 연산 결과가 0이 아닐 때 해제(0) 됩니다.


OF : 부호 있는 연산 결과가 용량보다 클 때 세트(1) 됩니다.


SF : 연산 결과가 음수가 되었을 때 세트(1) 됩니다. 연산 결과가 양수가 되었을 때 해제(0) 됩니다.


DF : 문자열 처리에서 연속되는 문자열의 처리 방향에 따라 세트(1) 됩니다.









IA-64 Register


64비트 레지스터는 EAX, EBX 등의 E를 R로 바꾼 RAX, RBX로 사용됩니다.

각 역할은 같습니다.









레지스터 크기


레지스터는 크기에 따라 부르는 이름이 다릅니다.




마찬가지로 EBX, ECX 등도 나뉘게 됩니다.


64비트는 위의 그림에서 EAX의 크기가 하나 더 붙게 됩니다.


'High Level Technique > Shellcoding' 카테고리의 다른 글

Section  (0) 2016.03.11
출력과 입력  (0) 2016.03.11
System Call  (0) 2016.03.11
Hello World  (0) 2016.03.11
Assembly Language  (0) 2016.03.11