어제까지 배운 지식으로 토끼모양을 출력하는 프로그램을 어셈블 언어로 작성해보자!
코드는 다음과 같다.
(어셈블 코드)
(출력 결과)
오늘은 레지스터에 대해 알아볼 것이다.
* 레지스터
1. 범용 레지스터
-> 이름이 범용이 들어가는 것 처럼 이곳저곳에서 많이 쓰이는 레지스터이다. 레지스터의 크기에 따라 명칭이 달라진다.
레지스터 크기 1, 2, 4, 8 바이트
8바이트 : RAX, RBX, RCX, RDX
4바이트 : EAX, EBX, ECX, EDX, ...
2바이트 : AX, BX, CX, ...
1바이트 : AH, AL, BH, BL, CH, CL ...
종류가 다르기보다는 크기를 나타내는 명칭이라고 생각하면된다. 같은 레지스터의 영역이다.
내용을 확인할 수 있는 프로그램을 만들면서 확인해보겠다.
(어셈블 코드)
위 코드는 레지스터 eax에 0101010101010101 이 들어간 값을 출력하는 프로그램이다.
레지스터의 내부구조를 살펴보기위해 만든 코드이다.
출력은 16진수로 표현된다. 그러므로 출력결과는 55555555 로 될것이다.
(출력 결과)
출력 결과가 55555555이 나왔다. 여기까지는 크게 다른 내용은 없다.
계산기에서 55555555을 입력하여 비트단위로 보면 0101010101010101인것을 확인 할 수 있다.
(55555555 (16))
여기서 eax 그대로에 ax를 사용하려 했으나 eax가 여기서 함수호출로 인해 사용되므로 ebx로 바꿔서 계속 진행해보겠다.
ebx 레지스터에 55555555을 넣고 bx 레지스터에 2222를 넣었다.
그리고 ebx를 출력해보면 출력결과가 어떻게 나올까?
(어셈블코드)
그 내용을 담은게 위의 코드이다.
실행해보겠다.
(실행결과)
(비트단위)
ebx 결과를 보면 ebx 내부 2바이트가 2222로 덮여쓰여진 것을 볼 수 있다.
계속해서 1바이트를 표현하는 bl, bh를 사용해보겠다. 이 둘은 상위1바이트 하위 1바이트를 가리키는 레지스터이다. ebx는 그대로 사용한 채 bh에 44 bl에 33을 넣어보겠다.
(어셈블코드)
실행하게 되면
(실행 모습)
(실행결과)
상위 1바이트는 44로 표현이 되었고 하위 1바이트는 33으로 표현되었다.
이렇게 범용레지스터는 크기를 나타내는 용어가 다르다. 즉 1바이트를 사용하고싶거나 2바이트, 4바이트 이렇게 사용하고 싶은 크기에 따라 다른 레지스터를 사용하면 된다.
2. 포인터 레지스터
- 주소를 표현하는 레지스터이다. 이 레지스터는 용도가 분명하게 있다.
- 용도가 정확하게 정해져 있기 때문에 다른용도로쓰면 세그먼트 폴트등 오류가 난다.
1) 스택 메모리에서 사용되는 레지스터
- EBP ( Extended Base Pointer )
- ESP ( Extended Stack Pointer )
- EIP ( Extended Instruction Pointer ) : 다음 명령을 가리키는 주소
2) 문자열 복사등에 사용되는 레지스터
- ESI ( Extended Source Index )
- EDI ( Extended Destination Index )
-> 다른용도로 쓰이기도한다.. 중요성이 덜해서 다른용도로 쓰기도한다.
3) 플래그 레지스터
- EFLAGS
0: CF (Carry Flag ) : 올림수가 발생한 경우 비트가 1로 셋팅된다.
6 :ZF ( Zero Flag ) : 연산의 결과가 0인 경우 비트가 1로 셋팅된다.
7 : SF ( Sign Flag ) : 부호가 발생한 경우(음수) 비트가 1로 셋팅된다.
11 : OF ( Overflow Flag ) : 오버플로우가 발생한 경우 비트가 1로 셋팅된다.
-> 나중에 디버거에서 직접 확인해보겠다.
'Hacking > System Hacking' 카테고리의 다른 글
System Hacking - 어셈블리어(사칙연산) (0) | 2017.04.14 |
---|---|
System Hacking - 데이터 저장(메모리이용) (0) | 2017.04.13 |
System Hacking - 어셈블리언어, 시스템콜 (0) | 2017.04.11 |
System Hacking - Compile (0) | 2017.04.08 |
System Hacking - 실습환경 구성(Red Hat) (0) | 2017.04.07 |