PowerPoint 프레젠테이션

Similar documents
K&R2 Reference Manual 번역본

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - ch07 - 포인터 pm0415

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

chap7.key

11장 포인터

슬라이드 1

chap 5: Trees

BMP 파일 처리

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

금오공대 컴퓨터공학전공 강의자료

제1장 Unix란 무엇인가?

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

제1장 Unix란 무엇인가?

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

제1장 Unix란 무엇인가?

untitled

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

제12장 파일 입출력


금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - [2009] 02.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

Microsoft PowerPoint - chap03-변수와데이터형.pptx

PowerPoint 프레젠테이션

11장 포인터

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Microsoft PowerPoint - chap11-포인터의활용.pptx

untitled

6주차.key

PowerPoint 프레젠테이션

Microsoft PowerPoint - Chapter_04.pptx

The Pocket Guide to TCP/IP Sockets: C Version

PA for SWE2007

Microsoft PowerPoint - chap10-함수의활용.pptx

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Chapter #01 Subject

chap10.PDF

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

설계란 무엇인가?

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - a10.ppt [호환 모드]

歯9장.PDF

PowerPoint 프레젠테이션

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

PA for SWE2007

Microsoft PowerPoint APUE(File InO).ppt

02장.배열과 클래스

Microsoft PowerPoint APUE(File InO).pptx

untitled

Microsoft PowerPoint - chap2

03장.스택.key

ABC 11장

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

PA0 for SSE2033

C++ Programming

Microsoft PowerPoint - chap06-1Array.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

KNK_C_05_Pointers_Arrays_structures_summary_v02

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

PowerPoint 프레젠테이션

, ( ),, ( ), 3, int kor[5]; int eng[5]; int Microsoft Windows 4 (ANSI C2 ) int kor[5] 20 # define #define SIZE 20 int a[10]; char c[10]; float

Microsoft PowerPoint APUE(File InO)

2007_2_project4

Lab 3. 실습문제 (Single linked list)_해답.hwp

10.

Microsoft PowerPoint - 알고리즘_4주차_1차시.pptx

13주-14주proc.PDF

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint Presentation

Microsoft Word - Network Programming_NewVersion_01_.docx

The Pocket Guide to TCP/IP Sockets: C Version

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Microsoft PowerPoint - 제11강 파일 처리

Infinity(∞) Strategy

금오공대 컴퓨터공학전공 강의자료

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

PowerPoint 프레젠테이션

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Microsoft PowerPoint - 제9강 문자열

C 언어 프로그래밊 과제 풀이

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

로봇SW교육원 강의자료

문서의 제목 나눔명조R, 40pt

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap12-고급기능.pptx

Transcription:

과제간단해설및소개 정우영조교 최종업데이트 : 2013-12-14

들어가며 이거자체는 1 번과제끝나고부터만들기시작했는데어쩌다보니배포는이제와서야 ㅜㅜ 대략적인문제만집었습니다. 프기실 에해당하는문제는가능한집지않으려합니다. 앞으로추가할거있으면하겠지만.. 이제마지막이네요ㅡㅡ ;

sizeof 연산자 array, struct/union 에대해선할당받은크기 포인터에겐포인터의크기를돌려줌 array 를어떤함수에게넘기면, 해당함수안에선, 포인터로접근하기때문에크기를모름. 어떤포인터가가리키고있는메모리의크기를알수있는방법은없음

int a; int b[5]; int *c = malloc(5 * sizeof(int)); struct st1 { char c[18]; }; union un1 { char c[14]; int i[5]; }; struct st1 d; struct st1 e[2]; union un1 f; union un1 *g = malloc(3 * sizeof(union un1)); sizeof a : 4 sizeof b : 20 sizeof c : 8 (on 64-bit) sizeof d : 18 sizeof e : 36 sizeof f : 20 sizeof g : 8 sizeof pointer of array : 8 printf("sizeof a : %ld\n", sizeof a); printf("sizeof b : %ld\n", sizeof b); long size(int *b) printf("sizeof c : %ld\n", sizeof c); { printf("sizeof d : %ld\n", sizeof d); return sizeof b; printf("sizeof e : %ld\n", sizeof e); } printf("sizeof f : %ld\n", sizeof f); printf("sizeof g : %ld\n", sizeof g); printf("sizeof pointer of array : %ld\n", size(b));

sizeof 연산자 문자열의크기를알아내기위해선, sizeof 가아닌 strlen 을사용해야함. char h[16] = "hello?"; char *i = "hello?"; printf("sizeof h : %ld\n", sizeof h); printf("sizeof i : %ld\n", sizeof i); printf("strlen h : %ld\n", strlen(h)); printf("strlen i : %ld\n", strlen(i)); sizeof h : 16 sizeof i : 8 strlen h : 6 strlen i : 6

무모한 pointer dereferencing if (input_url[7] == / ) 이행동을하기전에우선 input_url 의크기가 7 보다큰가확인합시다. strlen 구현은딸랑 5 줄이면 ok. size_t strlen(const char *str) { size_t size = 0; while(str[size++]); return size - 1; }

if 남발 if( input_url[0]!= 'f') if( input_url[1]!= 'i') if( input_url[2]!= 'l') if( input_url[3]!= 'e') ( 이렇게 15번비교 ) 많이비효율적이긴하지만, 윗사례보단차라리나음. 안전하기때문에. 그래도이러진맙시다...

우리에겐 strncmp 가있다. http://www.cplusplus.com/strncmp 직접구현하는것도간단 33 int strncmp(const char *a, const char *b, size_t size) 34 { 35 for (size_t i=0; i<size; i++) 36 { 37 if (a[i] > b[i]) 38 return -1; 39 else if (a[i] < b[i]) 40 return 1; 41 } 42 return 0; 43 }

getenv 조작 getenv 로받은주소의데이터를덮어씀 28 char *str = copy me! ; 29 char *home = getenv("home"); 30 strcat(home, str); 기존시스템의환경변수가날아감

getenv 조작 간단한확인코드 결과 덮어쓰는코드로 잠재적인위협 28 char *home = getenv("home"); 29 30 // look at the starting point and the ending point 31 for (int i=-200; i<200; i++) 32 putchar(home[i]); s:/usr/bin/eclipse:/usr/bin:/home/minsl/pintos/src/utilslc_identification=ko_kr.utf- 영향받는부분 8PWD=/home/minsl/testJAVA_HOME=/usr/lib/jvm/jdk1.6.0_35LANG=en_US.UTF- 8LC_MEASUREMENT=ko_KR.UTF- 8SHLVL=1HOME=/home/minslLANGUAGE=enLOGNAME=minslSSH_CONNECTION=115.125.135.131 8253 115.125.135.131 29LESSOPEN= /usr/bin/lesspipe %sxdg_runtime_dir=/run/user/minsldisplay=localhost:11.0lessclose=/usr/bin/l 이렇게문제터지면디버깅도힘들다

getenv 조작 제안 : 버퍼를새로만들어받아옵시다. char buffer[1024]; strcpy(buffer, getenv("home")); strcat(buffer, str); ( 물론 getenv("home") 접근이안전하다고가정함 )

1 byte I/O 1 byte 로 sys_read/sys_write 호출 char c; read(fd1, &c, 1); write(fd2, &c, 1); 만약 PA 1 에서운좋게 pass 됐어도, PA 2 에선 long time 을받았을것임. 매우느립니다. 따라서, 적당히큰버퍼를잡아서사용합시다. 권장 : 4K~128K (4,096 ~ 131,072 bytes)

Define 한값을사용합시다. 사례 : if (errno == 2) // 2 == ENOENT { return -1; // #define ERR_NO_FILE (-1) } 과제를만든사람들도 -1-2 -3-4 가무엇을의미하는지기억하지않습니다. 마찬가지로에러번호대신에 ENOENT 같은이름을씁니다. 다음과같이하세요. return ERR_INVAL_URL;

쓰지않을파일은열지도말라 사용하지않을파일을만들고보는경우. int fdout = open(output_path, O_CREAT O_RDWR, ) // returns true if input_url is valid if ( url_validate(input_url) == false) return ERR_INVALID_URL; URL 검사를하지않고쓸파일부터만들고보는경우혹은읽을파일이열리지않지만쓸파일부터열고보는경우 만약 O_TRUNC flag 가붙어있으면지우면안되는멀쩡한파일을하나날릴지도모름.

자원을해제할때 최근문제가된코드를보면, double free 를시도하던가 close(0) 을시도한코드가많음 // main thread int *connfd = malloc(4); *connfd = accept(); pthread_create(..., th_main, connfd); free(connfd); // double free th_main(void *arg) { int cfd = *(int *)arg; free(arg); // double free } thread 사이에선 address space 공유!

자원을해제할때 close(0); 문제예시 : void *thread_main(void *arg) { int fd; gcc 는 0 으로초기화. (vs 에선 0xcccc.) // 매우복잡한코드, // 하지만 fd 는사용하지않을 수 있음 } close(connfd); close(fd); closing FD 0 return NULL; 더이상표준입력 (stdin) 에서입력을받지못함 새로운 ( 파일 ) 디스크립터가 0 번으로열림

자원을해제할때 close(0); // 더나쁜예시 : time main thread creates children threads initial FD FD 0 (stdin) FD 1 (stdout) FD 2 (stderr) child 1 child 2 child 3 thread 종료전 close(0); 발생 FD 0 (closed) FD 1 (stdout) FD 2 (stderr) FD 3 (closed) main s accept() 0 [socket] FD 0 (socket) FD 1 (stdout) FD 2 (stderr) FD 3 (file) (0 closed by child 3) FD 0 (closed) [socket] FD 1 (stdout) FD 2 (stderr) FD 3 (file) close(0); 발생 FD 0 (closed) [child 2 s fd] FD 1 (stdout) FD 2 (stderr) FD 3 (don t care) FD 4 (closed) [socket] 해당소켓으로가는모든통신이막힘 : PA 5 long time 원인의하나

자원을해제할때 : 변수초기값 쓰레드를사용할땐, 주소공간을공유함을주의. 이런불상사를방지하기위해, 변수를다음처럼선언할수있음. int fd = -1; (file operation 에서 fd 가 -1 일경우아무일도안함 ; 최소한예측불가능한사태가일어나진않음 ) 이건한예방책이고, 이런문제가애초에발생하지않도록코드를작성할것. ( 모든경로에대해자원사용여부를확인하세요 )