프로그램의 제작 원리
.c -> [compile] -> .obj -> [link] -> .exe
디컴파일 : .exe -> .c 실행 파일을 디버거로 돌려서 소스코드로 복원하는 것.
핸드레이 : 디컴파일을 손으로 하는 것.
ALU. 연산 장치. 전기적인 신호를 흘려보내서 연산을 진행하는 회로.
I/O Unit. 모니터, 키보드 등 외부적인 부분과 통신을 위한 회로. 회로를 버스라고 부름.
Register. CPU의 임시 변수. 매우 빠름.
Control Unit. 현재 PC 상태, 다음에 어떤 연산을 해야할지. 연산의 결과를 알 수 있음.
General Purpose Register (범용 레지스터) : 고루고루 쓰이는 레지스터.
EAX : 연산의 결과를 저장, AX (16bit), AH(8bit), AL(8bit)로 나눌 수 있음. 함수의 리턴값을 저장
EBX : 주소 연산할 때 자주 사용.
ECX : 연산의 횟수를 지정해줄 때 자주 사용함.
EDX : EAX의 보조역할. ex) 나누기 몫 EAX, 나머지 EDX에 저장. 연산값이 4byte를 넘어가면 EDX에 저장.
ESI, EDI : 문자열에 관련된 레지스터. 배열을 참조할 때, ESI에는 주소, EDI에는 인덱스를 지정.
EBP, ESP : 주소값에 관련된 레지스터. 스택에서 쓰임.
Instruction Register : 다음 명령을 기억하는 레지스터.
EIP : EIP에 다음에 실행할 명령어의 주소가 들어가있다.
Eflags Register : 컴퓨터의 연산 상태를 알 수 있는 레지스터. bit마다 역할이 다름.
ZF : 연산의 결과가 0인가 아닌가를 판단. 등등.
'Reversing&Write up > Study' 카테고리의 다른 글
[HandRay] while문, for문 패턴, WinMain API? (0) | 2018.01.15 |
---|---|
[HandRay] if문 패턴, switch-case문 패턴 (0) | 2018.01.14 |
[HandRay] 함수 호출 패턴, 구조체 패턴, 코드 패치 (0) | 2018.01.13 |
[HandRay] Main 함수 parameter, pointer 패턴 (0) | 2018.01.12 |
[HandRay] OllyDbg 사용법과 Data Expression (0) | 2018.01.11 |