CPU 는 instruction(명령어)를 fetch, interpret, execute 한다.
- Fetch : 메모리상에 존재하는 명령어를 CPU로 가져옴
- Interpret : 가져온 명령어를 CPU가 해석
- Execute : 해석된 명령어대로 CPU가 실행
cpu 의 execution cylce은 다음과 같다 .
- 다음 instruction(명령어)를 메모리에서 가져온다. (pointed by eip)
- eip를 업데이트한다.
- fetch된 instruction을 실행한다.
... (반복)
레지스터란 ?
- CPU안에 있는 저장 가능한 공간 (휘발성)
- CPU가 사용하는 저장 공간중에 가장 빠른 저장공간
💻 어셈블리 레지스터
1. eip : Instruction Pointer (명령 포인터) -> 다음에 실행할 명령어의 주소를 담고 있음
2. eax : Accumulator -> 산술(덧셈, 곱셈, 나눗셈 등), 논리 연산을 수행하며 함수의 반환값이 이 레지스터에 저장됨
3. ebp : Base Pointer -> 스택프레임의 시작 지점 주소. 스택프레임을 사용하는 도중에는 값이 바뀌지 않다가 소멸되면 이전 스택프레임을 가르킴
4. esp : Stack Pointer -> 스택프레임의 최상단. PUSH,POP 명령어에 의해 값이 4byte씩 변함
💻 어셈블리 명령어
1. push x : esp가 4byte 감소하고, 줄어든 esp의 메모리 주소(mem[esp])에 x값이 들어감 / x의 값을 스택에 저장
2. pop x : 현재 esp에 x값을 저장하고, esp + 4byte. / 스택 최상단 값을 꺼내 x에 저장
3. mov eax, 0x31 : eax에 0x00000031의 값을 저장.
4. mov DWORD PTR [1000], 0x21 : mem[1000]에 0x21를 저장.
* DWORD PTR -> 해당 주소에서 double word(32bit==4byte)를 저장하겠다.
5. sub eax, 0x10 : eax에 eax - 0x10의 값을 저장.
6. and eax, 0xfffffff0 : eax에 eax와 0xfffffff0의 and 연산값을 저장.
7. call [함수 주소] : 함수 호출시 사용됨. 리턴 주소(call x 다음 위치)를 스택에 저장해두고 접근할 함수로 이동.
8. ret : call로 호출된 함수를 종료되고 call 다음 명령줄로 이동. eip에 esp에 있는 값을 저장하고, esp + 4byte를 해준다.
'CS' 카테고리의 다른 글
[CS 면접 준비] 컴퓨터 네트워크 (0) | 2023.04.14 |
---|---|
gdb로 register와 memory 변화 확인하기 (0) | 2022.09.05 |
Instruction & Register (0) | 2022.08.29 |
[인터넷 프로토콜] Security Attack / Passive and Active Attacks (0) | 2022.05.23 |
[인터넷 프로토콜] 모바일 IP (0) | 2022.04.26 |