SystemSoftware

    SystemSoftware - Exceptional Control Flow #3

    SystemSoftware - Exceptional Control Flow #3

    SystemSoftware - Creating Processes #2 SystemSoftware - Creating Processes #1 OS에서 process를 만드는 방식에 대해서 알아보자 process는 fork()라는 syscall을 통해서 child process를 생성한다. fork를 호출한 process가 parent process가 되고,.. hyeo-noo.tistory.com 지난번에 이어서 Exceptional Control Flow에서의 Shells, Signals, Nonlocal jumps에 대해서 알아보자 Shell : processor를 생성해 주는 역할 shell의 종류 sh shell csh/tcsh bash shell : default Linux shell shell의..

    Cache Lab  csim.c  #1

    Cache Lab csim.c #1

    cache lab에서 csim.c를 통해 cache의 동작 방식을 시뮬레이션해보자! SystemSoftware - Cache Memory #1 cache memory에 대해서 알아보자 Locality Temporal locality(시간 지역성) : 최근에 접근했던 data나 명령이 가까운 미래에 다시 사용될 가능성이 높다. (마지막으로 사용된 시간이 오래될수록 다시 사용될 hyeo-noo.tistory.com cache lab을 하기 위해서 반드시 이해해야 할 개념이 있다. cache에 접근하기 위한 address bit의 구조 cache 메모리 자체의 구조 cache에 data를 mapping 하는 방식 해당 개념에 대해서 알쏭달쏭하다면 위 링크를 통해서 이해하고 오자! cache lab tar 파일..

    SystemSoftware - Cache Memory #2

    SystemSoftware - Cache Memory #2

    SystemSoftware - Cache Memory #1 cache memory에 대해서 알아보자 Locality Temporal locality(시간 지역성) : 최근에 접근했던 data나 명령이 가까운 미래에 다시 사용될 가능성이 높다. (마지막으로 사용된 시간이 오래될수록 다시 사용될 hyeo-noo.tistory.com cache write방식에 대해서 알아보자 Cache Write는 어떤 방식으로 동작할까? 만약 cache에 write를 했는데 hit가 발생한 경우 Write-through : cache에 데이터를 입력하고 메모리에 바로 작성한다. (cache와 메모리의 정보는 항상 같음) 비용이 많이 든다는 단점이 존재. Write-back : 일단 cache에 수정사항을 입력하고 메모리에는..

    SystemSoftware - Cache Memory #1

    SystemSoftware - Cache Memory #1

    cache memory에 대해서 알아보자 Locality Temporal locality(시간 지역성) : 최근에 접근했던 data나 명령이 가까운 미래에 다시 사용될 가능성이 높다. (마지막으로 사용된 시간이 오래될수록 다시 사용될 가능성이 낮아짐) Spatial locality(공간 지역성) : 최근에 접근했던 주소와 가까운 data가 미래에 다시 사용될 가능성이 높다. 아래로 갈수록 느리면서 용량이 크고 가격이 싼 저장공간이 위치한다. 위로 갈 수록 용량은 적지만 속도가 빠르고 비싼 저장공간이 위치한다. cache의 메모리 공간은 일정한 크기의 blocks으로 나뉘어진다. cache에서 읽어 들일 수 있는 크기를 일정한 단위로 지정하는 것이다. 위 그림을 보면 CPU가 14번 블럭을 요청했고 cac..

    SystemSoftware - Creating Processes #2

    SystemSoftware - Creating Processes #2

    SystemSoftware - Creating Processes #1 OS에서 process를 만드는 방식에 대해서 알아보자 process는 fork()라는 syscall을 통해서 child process를 생성한다. fork를 호출한 process가 parent process가 되고, 새로 생긴 process가 child가 process이다... hyeo-noo.tistory.com int wait(int *child_status) child를 reaping하기 위해서 명시적으로 child가 종료할 때까지 기다리는 syscall return : child의 pid 값 만약 int *child_status 가 null이 아니라면 문제가 발생한 것이다. 이때 여러개의 매크로를 통해서 어떤 문제가 발생했는지..

    SystemSoftware - Creating Processes #1

    SystemSoftware - Creating Processes #1

    OS에서 process를 만드는 방식에 대해서 알아보자 process는 fork()라는 syscall을 통해서 child process를 생성한다. fork를 호출한 process가 parent process가 되고, 새로 생긴 process가 child가 process이다. int fork(void) return을 2번 한다. parent에서 fork를 호출하면 child에서 return 하고 parent에서도 return 한다. 이때 return 값에 따라서 parent인지 child인지를 구분할 수 있다. 0을 return 하면 child이고, child의 PID를 return 하면 parent이다. child는 parent의 모든 부분이 복제되어 생성된다. (가상 주소, parent에서 open ..

    SystemSoftware - Exceptional Control Flow #2

    SystemSoftware - Exceptional Control Flow #2

    SystemSoftware - Exceptional Control Flow #1 예외상황(예외처리)에 관해서 알아보자 예외 상황 : Segmentation Fault, Hardware Interrupt 등을 예외 상황이라고 한다 CPU는 명령어 주소에 있는 레지스터에 적혀있는 메모리에 가서 명령을 수행하고, 다 hyeo-noo.tistory.com 이전 포스팅에 이어서 Process와 context switch에 대해서 알아보자 Process : 실행중인 Program에서의 instace (Program : class, Process : object 라고 하기도 한다) Process의 추상화를위한 2개의 중요한 key 가 있다. 1. Logical control flow : 각각의 program이 cpu..

    SystemSoftware - Exceptional Control Flow #1

    SystemSoftware - Exceptional Control Flow #1

    예외상황(예외처리)에 관해서 알아보자 예외 상황 : Segmentation Fault, Hardware Interrupt 등을 예외 상황이라고 한다 CPU는 명령어 주소에 있는 레지스터에 적혀있는 메모리에 가서 명령을 수행하고, 다음 명령어를 받고 메모리에 가서 명령을 수행하는 반복적인 작업을 컴퓨터가 꺼질 때까지 반복한다. 이러한 시퀀스를 Control Flow라고 한다. 일반적으로 코드는 연속적으로 실행된다. 하지만 jump와 branch 같은 제어문(if, for loop)을 통해서 control flow를 바꿀 수 있다. 그리고 함수 호출을 통해서도 control flow를 제어할 수 있다. 하지만 위와 같이 일반적으로 제어할 수 없는 부분(system 상태의 변화)이 존재한다. 하드디스크, 네트..

    SystemSoftware - Linking #1

    SystemSoftware - Linking #1

    컴파일된 object 파일들을 linking해서 exe파일로 만드는 과정에서 어떤 일들이 일어나는지 알아보자 // main.c int sum(int *a, int n) int array[2] = {1, 2} int main(){ int val = sum(array, 2); return val; } // sum.c int sum(int *a, int n){ int i, s = 0; for(i = 0; i < n; i++){ s += a[i]; } return s; } main.c의 sum 함수는 어떤 과정을 통해서 sum.c의 sum 함수를 불러와서 기능을 수행할 수 있을까? 위와 같이 여러 개로 이루어진 파일들을 연결하는 과정을 Linking이라고 한다. 먼저 cpp(C Pre-Processor 전처리)..

    Attack Lab Solution  Phase_1 ~ Phase_5

    Attack Lab Solution Phase_1 ~ Phase_5

    - Code Injection Attacks : CTARGET %rsp를 0x38 만큼 빼주는 것으로 보아 buffer의 크기는 0x38bytes임을 알 수 있습니다. Phase1은 touch1을 호출만 하면 되므로 입력에 0x38bytes 만큼 dummy값을 준 후 touch1함수가 존재하는 주소인 40 18 c5 값을 리틀-엔디안 방식으로 입력해주었습니다. Answer : - Code Injection Attacks : CTARGET Touch2를 실행하고 %edi값과 Cookie값을 비교해서 같은 경우에 통과합니다. Touch2함수를 실행하기 전에 %rdi 레지스터에 Cookie값을 넣어주고 Touch2 함수를 실행해야 합니다. Buffer공간을 0x38만큼 할당 받은 후의 %rsp위치를 보니 0x..