틀린 부분이 있다면 언제든지 댓글 남겨주세요!
ISA : CPU가 사용하는 명령어 집합
CPU는 프로그램 동작을 위한 연산을 처리하고, 저장 장치는 동작에 사용되는 데이터를 저장한다.
GPU는 그래픽 데이터, 랜카드는 네트워크 통신, 사운드 카드는 소리 데이터를 처리한다.
이러한 부품들이 모여 컴퓨터를 이루는데 그 중에서 CPU가 사용하는 명령어와 관련된 집합을 명령어 집합 구조 (Instruction Set Architecture, ISA)라고 한다.
ISA의 종류로는 IA-32, x86-64(x64), MIPS, AVR 등이 존재한다.
- IA-32
인텔의 32비트 CPU 아키텍처. 이 환경에서 CPU가 제공할 수 있는 가상메모리의 최대 크기는 4GB.
이때 32비트 아키텍처의 의미는 CPU가 한번에 처리할 수 있는 데이터 크기라는 의미.
* WORD: CPU가 이해할 수 있는 데이터 단위로, WORD의 크기는 CPU 설계에 따라 달라짐.
- x86-64 (=intel64, IA-32e, EM64T, amd64)
IA-32 프로세서를 64비트 환경에서 사용할 수 있도록 확장(호환 가능). 이 환경에서 CPU가 제공할 수 있는 가상메모리의 최대 크기는 16EB.
주로 사용하는 컴퓨터에는 대부분 x86-64를 사용하는데, 이는 고성능 프로세서를 설계하기 위해 사용된다.
- ARM
x86-64는 비교적 많은 전력을 사용하고 발열도 심하기 때문에 작은 임베디드 기계에는 ARM이나 MIPS, AVR과 같은 프로세스를 사용한다.
Register : CPU가 사용하는 데이터 임시 저장
레지스터는 CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 저장 공간이다.
x64 아키텍처에는 크게 4가지 레지스터가 존재한다.
- 범용 레지스터
각 레지스터는 최대 8byte를 저장할 수 있으며, 주된 용도가 있긴 하지만 다른 용도로도 사용될 수 있는 레지스터
ex) rax(accumulator), rbx(base), rcx(counter), rdx(data), rsi(source), rdi(destination), rsp(stack pointer), rbp(base pointer), r8, r9 ... r15
* x32 아키텍처에서는 eax, ebx, ecx, edx, esi, edi, esp, ebp를 가지며 x64 환경에서도 호환 되어 사용 가능 (rax의 하위 32bit를 의미)
* x16 아키텍처에서는 ax, bx, cx, dx, si, di, sp, bp를 가지며 eax의 하위 16bit를 의미
- 세그먼트 레지스터
각 레지스터는 16bit. x32 아키텍처에서는 사용 가능한 물리 메모리의 영역을 넓히기 위해 사용했지만 64 아키텍처는 사용 가능한 영역이 넓기 때문에 이렇게 사용되지는 않고, 메모리 보호를 위해 코드 영역이나 데이터 및 스택 메모리 영역을 가리킬 때 사용하거나 운영체제별로 용도를 결정하여 사용함.
ex) cs(code), ss(stack), ds(data), es, fs, gs
- 명령어 포인터 레지스터
8byte의 크기를 가지며 CPU가 어느 부분의 코드를 실행할 지 가리키는 레지스터
ex) rip
- 플래그 레지스터
프로세스의 현재 상태를 저장하고 있는 레지스터로 x64 아키텍처에서는 64bit 크기를 가져 최대 64개의 플래그를 사용할 수 있음(실제로는 20여개만 사용)
ex) RFLAGS - CF(Carry Flag, 부호 없는 수의 연산 결과가 비트 범위 넘으면), ZF(Zero Flag, 0), SF(Sign Flag, 음수), OF(Overflow Flag, 부호 있는 수의 연산 결과가 비트 범위 넘으면)
*출처: Dreamhack 시스템해킹 강의
'Security > Reversing' 카테고리의 다른 글
[Malwarebytes] crackme 1 (0) | 2021.12.09 |
---|---|
데이터 보호 기법-Canary (0) | 2021.11.11 |
UAF 공격 (0) | 2021.11.06 |
[CodeEngn] Challenges Basic RCE L20 (0) | 2021.10.18 |
디버깅 탐지 방법 (0) | 2021.10.15 |
댓글