일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- function
- instruction
- Linux
- XML
- MIPS
- Pipelining
- php
- while
- html
- for
- python
- react
- architecture
- web
- system
- computer
- DB
- github
- data structure
- control
- Class
- DoM
- Algorithm
- javascript
- MacOS
- DS
- mysql
- Java
- DATAPATH
- CSS
- Today
- Total
목록memory (7)
YYYEJI
Virtual memory란? 실제로 존재하는 memory가 아닌 논리적으로 존재하는 memory입니다. Virtual memory는 memory의 성능보다는 protection 즉 정보를 보호하기 위해 존재한다고 할 수 있습니다. Terminology page - virtual memory block miss - page fault 그림을 보면서 살펴보겠습니다. Virtual memory에 address가 있으면 physical memory에서 data를 가져오고, virtual memory에 address가 없으면 hard disk에서 data를 가져와 CPU에 전달하게 됩니다. 마치 HD(Hard disk)의 cache($)처럼 사용하게 되는 것이죠. Program이 실행될 때 program은 vi..
Cache와 momery 사이에 데이터의 이동통로인 bus가 존재합니다. 1sec - 어떤 data를 찾을지 보내는 시간 17sec - data 찾는 시간 1sec - data를 fetch하는 시간 라고 가정을 하고, 각각의 bus/memory size에 따라 성능을 확인해 보겠습니다. One word wide memory Bus와 memory를 작게 만들면 굉장히 많은 시간이 걸리게 됩니다. 1 + 17*4 + 1*4 그럼 bus와 memory의 사이즈를 늘리면 어떻게 될까요? Wide memory 1 + 17 + 1 시간이 굉장히 줄은 것을 확인할 수 있습니다. 하지만 memory의 size를 늘려버리면 비용이 너무나도 크게 증가하기 때문에 큰 size의 memory는 사용하지 않습니다. 그렇게 나온..
간단하게 메모리 레이아웃에 대해서 설명해 드리겠습니다. Stack ↓ ↑ Dynamic data Static data Text Reserved ↑↑↑ Memory Layout ↑↑↑ ✓ Reserved는 op가 접근하는 부분으로 우리가 접근하려고 하면 error가 뜹니다. ✓ Text는 program code가 저장되어 있습니다. ✓ Static data에는 global variable이 저장되어 있습니다. ✓ Dynamic data는 heap 공간으로 새로운 공간이 malloc되고 free 되는 공간입니다. ✓ Stack은 function call이 일어날 때 사용되는 공간입니다. (automatic storage로 function에서 사용되는 register의 값들이 저장될 때 사용됩니다.) ◡̈
Procedure call을 할 때 stack을 사용합니다. ✓ main 함수는 caller ✓ label 함수는 callee ʷʰʸ main 함수에서 $s0 register을 사용하다가 jal instruction을 수행해서 label 함수로 갔을 때 label 함수도 $s0 register을 사용할 수도 있습니다. 이때, main 함수에서 $s0 값을 저장하지 않고 label 함수로 넘어간다면 main 함수의 $s0 값이 사라지게 됩니다. 그래서 caller 함수에서는 stack register의 값을 push하고 pop 할 수 있습니다. 위와 같이 register의 값을 저장하기 위해 stack을 사용합니다. ✓ Stack poiner ($sp)로 어느 stack의 위치가 active한지 알려줍니다..
Assembly 언어로 아래와 같이 있을 때, 204 BEQ, $t0, $zero, Less 208 ADD, $s2, $s0, $s1 *** something *** 216 j Exit . (위에 명렁어는 t0 == zero 이면 Less로 이동하라는 의미입니다.) 위에 있는 assembly code가 machine code로 바뀌면 000000 10001 10010 01000 00000 101010 /* slt 000100 01000 00000 00000 00000 00010 /* beq 000000 ............................................................. /* add 000010 ........................................
Operation - +, -, *, % etc. Operand - number(1, 2, 3, etc.) Instruction - 2+3 etc. Destination - □ 2 + 3이라는 instruction이 주어졌다고 가정한다. 1. Momery(RAM: Random Access Memory)에 가서 operator과 operand를 CPU로 가져온다. (RAM - 랜덤이기 때문에 주소를 알아야한다.) 2. CPU에서 연산을 수행한다. 3. 수행한 결과값을 Memory 어딘가에 저장한다. ◡̈
UAF 프로그램이 실행되면 실행에 필요한 정보들이 Memory 영역에 올라가게 되는데 Code영역, Data영역, Stack영역, Heap영역이 있습니다. Code영역 - 프로그램의 컴파일된 기계어 코드가 올라가는 곳 Data영역 - Global variable과 Static variable이 할당되는 곳 Stack영역 - Local variable과 Parameter가 저장되는 곳 Heap영역 - 빈 공간으로 필요에 따라 동적으로 메모리를 할당/해제하는 곳 Use After Free 줄여서 UAF라 부릅니다. Heap 영역에서 할당된 공간(malloc)을 free로 영역을 해제하고, 메모리를 다시 할당시 같은 공간을 재사용 하면서 생기는 취약점입니다. ◡̈