3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa

Similar documents
학번 : 이름 1. 다음프로그램실행결과를예측하시오. $./a.out & [1] 7216 $ kill -USR $ kill -USR 아래학생이작성한쓰레드코드의문제점을설명하시오. void* thread_main() { pthread_mutex_t

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.

4. What will be the output of this program? Explain results for each variable and each thread. #include "apue.h" int var=1; pthread_mutex_t lock; void

PowerPoint 프레젠테이션

2009년 상반기 사업계획

vi 사용법

제1장 Unix란 무엇인가?

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

1장. 유닉스 시스템 프로그래밍 개요

10.

제1장 Unix란 무엇인가?

ABC 11장

The Pocket Guide to TCP/IP Sockets: C Version

/chroot/lib/ /chroot/etc/

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다. / /bin/ /home/ /home/taesoo/ /home/taesoo/downloads /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자 (t

The Pocket Guide to TCP/IP Sockets: C Version

학번 : 이름 : 1. 다음파일트리구조를가진유닉스시스템이있다고가정하자. / /bin/ /home/ /home/taesoo/ /usr/ /usr/lib/ /usr/local/lib /media 모든폴더에파일이하나도없다고가정했을때사용자가터미널에서다음 ls 명령입력시화면출력

<43B7CE20BECBBEC6BAB8B4C220BCD2C4CFC7C1B7CEB1D7B7A1B9D62E687770>

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

Microsoft Word - Network Programming_NewVersion_01_.docx

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft Word - KPMC-400,401 SW 사용 설명서

1장. 유닉스 시스템 프로그래밍 개요

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

2009년 상반기 사업계획

Microsoft PowerPoint - 09-Pipe

좀비프로세스 2

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

chap7.key

SYN flooding

Microsoft PowerPoint - SP6장-시그널.ppt [호환 모드]

본 강의에 들어가기 전

제1장 Unix란 무엇인가?

[ 목차 ] 1. 취약점개요 2. 배경지식 3. 취약점발생결과 (exploit 테스트 ) 4. 취약점발생원인분석 4.1 취약점 Q&A 5. exploit 분석 6. 보안대책 7. 결론 8. 레퍼런스 2

<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074>

The Pocket Guide to TCP/IP Sockets: C Version

강의10

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

Microsoft PowerPoint - 06-CompSys-16-Socket.ppt

6주차.key

3. 다음그림은프로세스의 file table 과 v-node 테이블의연결관계예제이다. 위그림을참고하여두개의서로다른프로세스가같은파일을 open 명령을사용하여열었을때의연결관계를도시하시오. 4. 메모리영역은 low-address 부터 high-adress 까지순서대로나열했을

The Pocket Guide to TCP/IP Sockets: C Version

untitled

제9장 프로세스 제어

untitled

슬라이드 1

03장.스택.key

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

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

제1장 Unix란 무엇인가?

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

<43B7CE20BECBBEC6BAB8B4C C5EBBDC52E687770>

Sena Technologies, Inc. HelloDevice Super 1.1.0

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

System Programming Lab

Chap04(Signals and Sessions).PDF

본 강의에 들어가기 전


슬라이드 1

untitled

ronny report( wooyaggo, hkpco ).hwp

歯9장.PDF

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - chap6 [호환 모드]

본 강의에 들어가기 전

untitled

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

Microsoft PowerPoint - 10_Process

제1장 Unix란 무엇인가?

PowerPoint 프레젠테이션

2009년 상반기 사업계획

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>


K&R2 Reference Manual 번역본

제12장 파일 입출력

슬라이드 1

<4D F736F F D2034C0E52D554E495820BCD2C4CF20C0C0BFEB20C7C1B7CEB1D7B7A1B9D6>

PowerPoint 프레젠테이션

11장 포인터

Microsoft PowerPoint - 10_Signal

13주-14주proc.PDF

Microsoft PowerPoint - 15-EmbedSW-10-Socket

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Chapter_02-3_NativeApp

슬라이드 1

고급 프로그래밍 설계

고급 IPC 설비

PowerPoint 프레젠테이션

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - 04-UDP Programming.ppt

제8장 프로세스

5.스택(강의자료).key

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Transcription:

학번 : 이름 : 1. 다음가정하에서아래프로그램의출력물을예측하세요. 가정 : 부모프로세스의 process id=10100, 자식프로세스의 process id=10101. char buf[] = "a write to stdout\n"; int var; /* automatic variable on the stack */ pid_t pid; int glob = 31; /* external variable in initialized data */ if (write(stdout_fileno, buf, sizeof(buf)-1)!= sizeof(buf)-1) err_sys("write error"); printf("before fork\n"); /* we don't flush stdout */ if ((pid = fork()) < 0) err_sys("fork error"); else if (pid == 0) glob++; /* modify variables */ sprintf(buf, stdout\n ); else sleep(2); printf("%d %d %d %s\n", pid, getpid(), glob, buf); 2. 다음프로그램의출력물을예측하시오. int var=1; void* mythread(void* arg) sleep((int)(intptr_t)arg); int glob = 31; glob++; /* modify variables */ var++; printf("%d %d \n", glob, var); return NULL; void* res; pthread_t thread[2]; pthread_create(&thread[0], NULL, mythread, 1); pthread_create(&thread[1], NULL, mythread, 2); pthread_join(&thread[0], &res); pthread_join(&thread[1], &res); return 0;

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signal.h> #include <unistd.h> #include <stdio.h> static void sig_usr1(int signo) printf("caught SIGUSR1\n"); sigset_t newmask, oldmask, pendmask; if (signal(sigusr1, sig_usr1) == SIG_ERR) err_sys("can't catch SIGUSR1"); sigemptyset(&newmask); sigaddset(&newmask, SIGUSR1); if (sigprocmask(sig_block, &newmask, &oldmask) < 0) err_sys("sig_block error"); sleep(15); /* Reset signal mask */ if (sigprocmask(sig_setmask, &oldmask, NULL) < 0) err_sys("sig_setmask error"); 초후 (5) 20 초후 (6) 30 초후 ) sleep(15); printf("done!\n"); 실행내용 : $./a.out & [1] 21413 ( 21413 이라는 process id 로백그라운드에서수행중.) $ kill -USR1 21413 (5 초가지난후이명령이실행된다고가정.) $ kill -USR1 21413 (10 초가지난후이명령이실행된다고가정.) $ kill -USR1 21413 (20 초가지난후이명령이실행된다고가정.) 결과물및각줄의출력시점 :

sigprocmask 함수설명 ( 문제 3 용 ): 4. 다음프로그램의이론적으로가능한모든수행결과를나열하고, 각각경우가나오는이유를구체적인사례를들어정확히기술하세요. #include <pthread.h> pthread_t ntid[8]; int count=0; ////////////////////////////////////////////////////////////////// void * thr_fn(void *arg) int i; count=count+1; return NULL; int i; void* res; for (i=0; i<2; i++) pthread_create(&ntid[i], NULL, thr_fn,null); for (i=0; i<2; i++) pthread_join(ntid[i], &res); printf("count= %d\n", count); 5. 위에서 for ~ pthread_join 블럭을지울경우가능한모든결과를예측하시오.

6. 다음은클라이언트가보낸메시지를처리하는간단한서버프로그램의소스코드이다. #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> int main() int server_sockfd, jlient_sockfd; int server_len, client_len; char string[256]; struct sockaddr_in server_address; struct sockaddr_in client_address; server_sockfd = socket(af_inet, SOCK_STREAM, 0); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = htonl(inaddr_any); server_address.sin_port = htons(9734); server_len = sizeof(server_address); printf("0\n"); bind(server_sockfd, (struct sockaddr *)&server_address, server_len); printf("1\n"); listen(server_sockfd, 5); printf("2\n"); client_sockfd=accept(server_sockfd, (struct sockaddr *)&client_address, &client_len); printf("3\n"); read(client_sockfd, string, 256); printf("%s\n", string);... 만약클라이언트가서버에연결후아래코드를실행했을때각줄실행전후서버의출력을예측하세요. connect(sockfd, (struct sockaddr *)&address, sizeof(address)); // 연결된다고가정. write(sockfd, "asdf", 5);

7. 다음두개의소스코드를보고, 아래명령문의출력을예측하세요. ( 단 real user-id 는 1000 가정, 공란총 2 개채우세요 ) a.out (a.c): int main(int argc, char *argv[]) system(argv[1]); b.out (b.c): printf("real uid=%d effective uid=%d\n", getuid(), geteuid()); return 0; $./a.out./b.out $ sudo chown root./a.out $ sudo chmod +s./a.out $./a.out./b.out 8. a. 위에서만들어진 a.out 은보안상위험하다. 그이유를설명하고, 그위험성을피하기위해 a.c 를수정하시오. Hint: seteuid(new_effective_user_id) 함수사용할것. b. Saved SUID 개념이필요한이유를위시나리오와관련하여설명하세요. a.c 는반드시 effective root 권한이필요한프로그램이지만, 때때로임의의다른프로그램을호출해야한다고가정하세요.

9. 다음 4 가지프로그램이구현되어있다고가정하자../tolower ( stdin 입력을소문자로변환해 stdout 으로출력하는프로그램 )./toupper ( stdin 입력을대문자로변환해 stdout 으로출력하는프로그램 )./tomixed ( stdin 입력을소문자와대문자로번갈아가면서변환해 stdout 으로출력 ) tee ( stdin 입력을파일과 stdout 으로동시에출력 ) 또한다음두개의파일이있다고가정하자. File1: asdf ASDF File2: povijh 다음각과정에서화면출력, 파일출력, 프로그램종료등을 모두 예측하세요 : $./tolower < File1 $ mkfifo fifo1 $./tolower < fifo1 > File3 & $./toupper < File1 tee fifo1 $ cat File3 $./toupper < File3 > fifo1 아래정의를참고하여 10 번문항을푸세요.

10. 다음은채팅프로그램의클라이언트소스코드이다. 공란을채우시오. ( 총 6 개 ) void prompt() printf("<you> "); fflush(stdout); main (int argc, char *argv[]) int len, rc, sockfd, max_sd; char send_buf[4096], recv_buf[4096]; struct sockaddr_in serv_addr; fd_set master_set, select_result; sockfd = socket(af_inet, SOCK_STREAM, 0)); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(server_port); inet_pton(af_inet, argv[1], &serv_addr.sin_addr); connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr); FD_ZERO(&master_set); FD_SET(, & master_set); FD_SET(, & master_set); max_sd=max(, ); printf("connected to remote host. Start sending messages.\n"); prompt(); while(1) memcpy(&select_result, &master_set, sizeof(master_set)); rc = select(max_sd + 1, &select_result, NULL, NULL, NULL); if( ) gets(send_buf); send(sockfd, send_buf, strlen(send_buf), 0); prompt(); else if( ) rc = recv(sockfd, recv_buf, 4096, 0); if (rc < 0) exit(-9); // recv failed if (rc == 0) printf("server disconnected\n"); close(sockfd); recv_buf[rc]=0; // make null terminated string printf("\r%s\n", recv_buf); prompt(); else // timed out close(sockfd); return 0; close(sockfd); return 0;