4byte가 하나의 블럭
레지스터를 통해서 값을 이동
CPU 리틀 엔디언
bit단위가 아니라 최소단위 1byte
32bit IA32
[레지스터]
사전 용어
[CPU 메모리 레지스터]
EAX = accmulator
- 산술연산, 실제 값 가장 많이 씀
EBX = base regist
- 메모리 주소 지정을 확장, 포인터
ECX = count register
- 반복 횟수
EDX = data register
- 입출력 연산, EAX와 같이 쓰임 (OEP값이 입력)
OEP(Original entry point)
- image base + address of entry point) 시작지점
image base
- PE파일 저장되는 시작주소 (exe파일 0x00400000)
adress of entry point
- 메모리 실제 시작
EBP = base pointer
- 스택 시작 주소 값
ESP = stack pointer
- .스택 끝 주소
EIP = instruction point
- 다음 명령어가 실행될 메모리주소 저장
ESI = source index
- 데이타 출발지 주소에 대한 값(복사 , 조작)
EDI = destination index
- 데이타 목적지 주소에 대한 값
[세그먼트 레지스터 (Segment Register)] 16bit 4byte, 8bit 2byte
CS =code segment
- 코드 시작
DS = data segment
- 데이터 시작
SS = stack segment
- 연산작업 임시 저장소
ES, FS , GS
- 안중요함
Basic program execution register
- General Purpose Registers (32비트 -8개)
- Segment Registers (16비트 -6개)
- Program Status and Control Register (32비트 -1개)
- Instruction Pointer (32비트 - 1개)
General Purpose Register(범용 레지스터)
범용레지스터의 크기는 32비트 (4바이트)이며, 8개로 구성되어 있다
필요에 따라서 자유롭게 사용이 간으한 레지스타이다
EAX 기분으로 레지스터를 나눈 구획을 살펴보면
EAX는 0~31비트 총 32비트의 크기를 갖는다.
AX는 0~15비트 EAX의 하위 16비트의 크기를 갖는다.
AH는 8~15비트 AX의 상위 8비트
AL는 0~7비트 AX의 하위 8비트
상황에 맞게 8비트 16비트 32비트를 효율적으로 사용이 가능하다.
예를 들어 데이터를 저장할 크기가 12비트라고 하면 AH까지만 사용하여 데이터를 저장
AX는 FFCC
AX는 FF
AH는 CC
ctrl+f2 => 리셋(최초)
F9 = 프로그램실행
F8 = 주소진행
F7 = 코드함수
ctrl+f2 => 리셋(최초)
F9 = 프로그램실행
F8 = 주소진행
F7 = 코드함수
f2 = 브레이크
주소찾아가기 ctrl+g 0x401000
space bar (어셈 코드 넣기)
mov eax, 0x12345678 4바이트
[eax]
space bar
mov eax, 0x12345678 4 bytes
Result eax: 12345678
[ah]
space bar 1 byte
mov ah, 0x11
Result eax: 123411CD
[ax]
space bar 2 bytes
mov ax, 0x12345678 [인코딩 오류]
mov ax, Oxabcd
[AL]
space bar
mov al, 0x22 1바이트만 가
Result eax: 12341122
mov ebp, esp
sub esp, c add 더하기 sub 빼기(블럭 할당)
mov esp, ebp 블럭정리
Assembly(어셈블리)
어셈블리 언어는 언어들 중에 낮은 레벨 즉 컴퓨터에 가장 가까운 언어.
Reversing에서 사용되는 언어는 어셈블리 언어
CPU 마다 고유한 어셈블리 언어를 갖고 있다
어셈블리 언어는 CPU가 사용하는 바이너리 코드 기계어 사람이 보기 쉬운 형태로 문자화 시킨 것
프로그래밍 언어들은 컴파일러를 통해 기계어로 각자의 언어들을 CPU가 해석해서 실행할 수 있게 기계어로 변환된다.
총실습 (eax= 0019FFCC)
mov eax, 0x19ffcc
Movzx eax, ax 0000FFCC
Movsx eax, ax FFFFFFCC
movsB byte 1byte
movsw word 2byte
movsd dword 4byte
movsq qword 8 byte
'보안 > 리버싱' 카테고리의 다른 글
[리버싱] 16진수에 관하여 (0) | 2025.02.13 |
---|---|
[리버싱] x64dbg 실습 및 조작키 (0) | 2025.02.13 |
[리버싱] x64dbg 실행 및 조작키 (0) | 2025.02.13 |
[리버싱] x64dbg 설치 (0) | 2025.02.13 |
[리버싱] 리버싱이란 (0) | 2025.02.12 |