[범용 레지스터]
EAX - 누산기 레지스터
ECX - 카운터 레지스터
EDX - 데이터 레지스터
DBX - 베이스 레지스터
ESP - 스택 포인터
EBP - 베이스 포인터
ESI - 근원지 인덱스
EDI - 목적지 인덱스
*주요 레지스터
EIP(Instruction Pointer) - 현재 읽고있는 명령의 위치를 가리키는 명령으로 읽고 있는 각 단어를 손가락으로 짚으며 읽듯이
프로세서가 EIP 레지스터라는 손가락을 사용해 읽는것과 같다.
EFLAGS 레지스터 - 메모리 세그먼트를 관리하는 레지스터
[어셈블리 언어]
set disas intel 명령어로 intel 문법을 사용하며 .gdbinit 파일에 등록하여 유지 가능
(인텔 문법 어셈블리 명령 형식)
명령 <목적지> <근원지>
ex) mov ebp, esp = 값을 esp에서 ebp로 이동시킨다.
sub esp, 0x8 = esp에서 8을 뺀 결과를 esp에 저장한다.
cmp DWORD PTR [ebp-4], 0x9 = ebp 4바이트 주소값에서 4만큼 뺀 주소의 값과 9를 비교한다. (DWORD는 4바이트 값을 의미)
jle <main1>
jmp <main2> = 위에서 비교 후 jle는 비교 결과값이 작거나 같으면 main1으로 점프, 그렇지 않으면 main2로 점프한다.
[GDB]
i r eip (info register) = 해당 명령어로 해당 레지스터의 정보를 확인할 수 있다.
examine 명령어인 x를 사용하여 메모리를 조사할 수 있으며 표현 형식(o,x,u,t)과 같이 사용한다.
x/o 0x11111111 = 8진법으로 해당 메모리 주소 조사
x/x $eip = 16진법으로 eip 메모리 주소 조사, x/u는 부호가 없는 10진법, x/t는 2진법으로 보여준다.
x/i $eip = 역어셈블된 어셈블리 언어의 명령 메모리를 보여준다. 평문같이 보여준다는 뜻 (ex: DWORD PTR [ebp-4],0x0)
표현 형식 앞에 숫자가 붙으면 목표 주소에서 여러 개를 조사하는 형식으로 사용된다.
x/12x $eip = 16진법으로 eip 메모리 주소를 조사하며 해당 주소부터 12 항목의 메모리 주소를 확인한다. -> 0x0011111 0x00111222
0x00111333 ... 0x00111212
표현형식 뒤에 크기 문자를 설정하여 바이트 크기를 변경하여 출력할 수 있다.
b - 단일 바이트, h - 2바이트의 하프워드, w - 4바이트의 워드 g - 8바이트의 자이언트
0xc4c5c6c7 -> x/xb -> 0xc7 0xc6 0xc5 0xc4 , x/xh -> 0xc6c7 0xc4c5 , x/xw -> 0xc4c5c6c7 (거꾸로 적히는 이유는 리틀 엔디안 방식이기 때문)
nexti - 현재 명령을 실행해준다. 즉, EIP의 명령을 읽는다
list - 프로그램의 소스 코드를 출력한다.
break - 프로그램의 실행 멈춤 포인트를 설정한다. *(주소)로 설정하거나 main 혹은 함수명(strcpy)로 설정하거나 list에서 확인 가능한 코드 라인의 넘버 (break 7)와 같이 설정한다.
bt - 스택을 되돌아보는데 사용한다. 즉, 스택에 쌓인 명령을 확인할 수 있다.
'8. 정보보안 노트 정리' 카테고리의 다른 글
PCAP 파일 및 멀웨어 소스 제공 사이트 (0) | 2023.12.26 |
---|---|
침입탐지, 보안 모니터링, 로그 관리를 하는 Security Onion 설치 (0) | 2023.12.26 |
정보보안산업기사 실기 공부본 (0) | 2023.12.14 |
해시값 크래킹 사이트 크랙 스테이션 (0) | 2023.12.11 |
포맷스트링 공격 정리 (1) | 2023.12.11 |