티스토리 뷰
프로그램 제작 원리
.c -> [complie] -> .obj -> [link] -> .exe
decompiler는 .exe -> .c 해주는 프로그램이다. 완벽하게 재구성될 수 없으며, 결과가 매우 다양할 수 있다.
disassembler는 기계어 -> 어셈블리어로 변환 해주는 프로그램이다.
IA32 - 인텔 cpu 구조
크게 4가지로 나누어져 있음.
ALU : 전기적인 신호를 계산하는 회로
Register : cpu에 있는 임시 기억 공간
가장 빠른 메모리 공간임
Control unit : pc가 연산할때 상태, 결과를 알 수 있음 (EIP, IR, Eflags)
I/O unit : 다른 버스들과 입출력하는 통로 역할.
*Register 에 대해 자세하게
: 범용 레지스터
EAX
연산의 결과를 저장하기 위한 레지스터.
연산의 결과가 2바이트면 절반인 AX를 사용.
이것을 또 절반으로 쪼개면 AH, AL로 나뉘게 됨.
함수의 반환값이 저장되는 용도로도 사용됨.
EBX
주소 연산할 때 사용한다.
많이 사용되지는 않는다.
ECX
연산의 횟수를 지정해줄 때 자주 사용한다.
EDX
EAX의 보조역할로 많이 사용.
연산의 결과가 4바이트를 넘어서면 EDX에 추가적으로 저장
나누기 연산을 할 때 몫을 EAX에, 나머지를 EDX에 저장함.
ESI
문자열에 관련된 레지스터
ESI가 저장되어 있는 문자열에 EDI가 가르키는 문자로 가라
EDI
문자열에 관련된 레지스터
ESI가 저장되어 있는 문자열에 EDI가 가르키는 문자로 가라
EBP
메모리는 Code, Data, Heap, Stack 영역으로 분류한다.
EBP와 ESP는 Stack영역에서 사용되는 레지스터라고 할 수 있다.
EBP는 스택의 시작 주소를 가리킨다.
EBP는 보통 변하지 않는다.(한 함수에서 고정적이다.)
ESP
EBP는 스택의 맨 윗부분(높은 주소)을 가리킨다.
push, pop 될 때마다 ESP가 변한다.
EIP
CPU가 실행 할 다음 명령어가 있는 레지스터.
Eflags
연산하면서 컴퓨터의 상태를 볼 수 있는 레지스터.
zero flag는 연산 결과의 참, 거짓을 판단
메모리 구조
Code | Data(BSS(초기화 되지 않은 변수) | Heap | Stack | kernel
<- 낮은 주소 -> 높은 주소
'pwnable > 정리' 카테고리의 다른 글
gdb 사용법 정리 (0) | 2018.01.06 |
---|---|
ShellShock bash shell 취약점(CVE-2014-6271) (0) | 2018.01.01 |
쉘코드 모음 정리 (1) | 2017.12.14 |
올리 디버거 기초 사용법, 명령어 (0) | 2017.12.14 |
CPU 레지스터 정리 (0) | 2017.12.14 |
- pwnable
- srop
- tcache
- HackCTF
- heap
- fsop
- pwnable.tw
- pwable
- hacking
- exit
- TLS
- 본선가고싶다
- ebp change
- overflow
- rt_sigreturn
- SQLi
- FSB
- stack reusing
- fastbin
- glibc
- oob
- 해킹
- codegate
- shellcoding
- fastbindup
- Total
- Today
- Yesterday