본문 바로가기

분류 전체보기

(71)
Lec 2-2. Linear Classifier: Parametric Approach, Interpretation, Limitation Linear Classifier Neural network의 기본적인 building block을 이루는 linear classifier에 대해 살펴보기로 한다. Linear classifier의 기본적인 아이디어는 다음과 같다. 만약 10개의 class로 이미지를 분류하는 classifier인 경우, 각 class에 대한 score가 input x와 weight parameter W의 함수로 표현된다. Score 값이 가장 큰 label로 class를 판단하게 된다. 함수 중 가장 간단한 linear 함수를 가정하면, 아래 수식의 첫 줄과 같이 함수를 표현할 수 있다. 이 때, linear 함수에서 bias vector b를 포함하는 것이 더 유용함이 알려져 있다. 그래서 기본적인 linear clas..
Ch 8-2. Process, Private Address Space, Context Switch Process: Illusion of Exclusive Use of the Program Operating system kernel에 있어 중요한 개념 중 하나는 process이다. Process의 개념을 통해 application programmer의 입장에서 프로그램을 돌릴 때, 현재 돌아가고 있는 프로그램이 컴퓨터 시스템과 각종 컴퓨팅 자원을 독점적으로(exclusively) 사용하는 듯한 착각(illusion)을 제공할 수 있다. 예를 들어, c 프로그램을 작성하고, 이를 gcc 컴파일러를 이용해 컴파일하여 executable object file을 얻은 상황을 가정하자. 이제, shell에 executable file의 이름을 입력함으로써 프로그램의 실행을 명령할 수 있다. 이 때, shell은..
Lec 2-1. KNN(K-Nearest Neighbors) Classifier, Hyperparameter Tuning, Dataset Split Nearest-Neighbor (NN) Classifier Data driven 방식의 image classifier 중 가장 naive한 approach는 nearest-neighbor classifier이다. 우선 training data를 모두 메모리에 저장해둔 뒤, 판단하고자 하는 test data에 대해 미리 저장된 training data와 모두 비교해 가장 가까운(nearest) label로 분류하는 것이다. Distance Metric: L1 Distance '가장 가깝다'는 것을 이미지에 대해 어떻게 적용할 것인지를 판단해야 한다. 하나의 방식은 L1 distance이다. 이것은 (32, 32, 3)의 3차원의 이미지를 (32*32*3, 1)이라는 하나의 긴 벡터라고 생각하고, 비교하고자..
Ch 8-1. Control Flow, Exception Handling, Exception의 종류 Exceptional Control Flow (ECF) 프로세서가 돌아가고 있는 동안, PC(=Program Counter)는 항상 메모리에 저장되어 있는 명령어를 가리키고 있다. (가리키고 있다는 것은 해당 명령어가 저장되어 있는 주소 값을 가지고 있다는 의미이다.) 하나의 명령어가 실행되면 다음 명령어를 실행하기 위해 PC 값이 다음 주소를 가리킬텐데, 이러한 transition을 'control transfer'이라고 한다. Control transfer은 연이은(=adjacent) 메모리 주소의 sequence로 이루어지기도 하지만, jump, call, return 명령어와 같이 not adjacent한 메모리 주소로 transition 하기도 한다. 이러한 transfer은 모두 프로그램 내에..
[Buffer Lab] Level 2, Stack Corruption 이용하여 원하는 assembly code 실행시키기 Level 2의 목표 Level 0, 1에서는 stack corruption을 통해 함수의 return address, 함수의 argument 값을 조작할 수 있었다. 여기서는 machine instruction을 input string으로 입력함으로써, 특정 instruction이 실행되도록 하는 것이 목표이다. 이를 조금 더 구체화해보면, 스택이 아래와 같은 상황이 되어야 한다. getbuf 함수에서 stack corruption을 발생시켜 return address가 우리가 원하는 값이 되도록 해야 한다. 이 때 return address를 이어지는 주소 값으로 한다면, 그 다음 주소로 이동하여 machine instruction들을 수행할 것이다. 그리고 이 machine instruction은 ..
[Buffer Lab] Level 1, Stack Corruption 이용하여 함수 argument 조작하기 Level 1의 목표 Level 1에서는 fizz 함수로 흐름을 우회하되, 여기서 cookie를 함수의 argument로 넘겨준 것과 같은 효과를 주도록 해야 한다. 그래서 if 문으로 들어와 문자열을 출력하는 것이 목표이다. 즉, 함수의 흐름을 바꾸는 것은 Level 0과 같지만, 함수의 argument에 대해 분석해본다는 점에서 다를 것임을 알 수 있다. fizz 함수의 시작 주소 값을 확인한다 시작 주소 값은 0x08048c42 이다. Level 0를 풀었으므로, getbuf 함수에서 stack corruption을 발생시켜 원하는 주소 값으로 jump 하는 방법을 알고 있다. exploit string file만 바꿔준다. 실행 결과, fizz 함수에는 도달하였으나, val==cookie 조건을 ..
[Buffer Lab] Level 0, Stack Corruption 이용하여 함수의 return address 조작하기 Level 0의 목표 bufbomb 프로그램이 실행되면 test() 함수가 호출된다. 이 함수 내에서 다시 getbuf() 함수를 호출하는데, 만약 getbuf() 함수가 정상적으로 종료되면, test() 함수의 if-else 문을 들어와서 이전에 그냥 실행시켰을 때처럼 메시지를 출력하고 프로그램이 종료된다. 여기서 원하는 것은 getbuf() 함수가 return할 때, smoke() 함수가 실행되도록 하는 것이다. getbuf() 함수의 Assembly Code gdb의 disas 명령어로 getbuf 함수의 assembly code를 얻을 수 있다. 일단, getbuf 함수를 호출하는 test() 함수의 15줄에 breakpoint를 걸고 실행시킨다. Return Address는 스택에 저장되어 있다..
[Buffer Lab] 프로젝트 파일 다운로드 및 시작하기, executable 프로그램 실행하기(32/64-bit 환경 호환성 해결) 프로젝트 파일 다운로드 Buffer lab의 프로젝트 파일은 아래 링크에서 다운로드 받을 수 있다. 다운로드 링크: http://csapp.cs.cmu.edu/3e/labs.html CS:APP3e, Bryant and O'Hallaron Lab Assignments This page contains a complete set of turnkey labs for the CS:APP3e text. The labs all share some common features. Each lab is distributed in a self-contained tar file. You will need a CS:APP account to download the code. To untar foo.tar, t csapp.c..