보안/리버싱

[리버싱] 레지스터 정리

antoroong 2025. 2. 13. 03:01

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

  1. General Purpose Registers (32비트 -8개)
  2. Segment Registers (16비트 -6개)
  3. Program Status and Control Register (32비트 -1개)
  4. 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