보안프로그래밍 몇가지 문제풀이 관련3
글쓴이: necrid / 작성시간: 수, 2012/10/17 - 10:47오후
보안프로그래밍을 공부하고 있는데요.
다른분들이 생각하는 문제의 답변을 듣고
공부하는데 도움을 받고 싶어서 올리게 되었습니다.
안전한 정수 사용 방법을 참고하여 아래 프로그램 실행 결과에 대해 설명하시오.
1. 다음 배열 선언에는 몇 개의 오류가 있다. 오류에 대해 설명하여라.
int a[N] = {0,2,2,3,4}; int b[N-5]; int c[3.0];
2. 다음 프로그램은 무엇이 잘못 되었는가? 프로그램을 올바르게 수정하고, 출력값의 의미를 설명하여라.
#include <stdio.h> int main(void) { int a[] = {0,2,4,6,8},*p = a +3; printf("%s%d%s\n%s%d%s\n","a[?] = ",*p,"?","a[?+1] = ",*p+1,"?"); return 0; }
3. 최대 n차 두 다항식을 더하는 다음 함수를 작성하여라.
void add (double f[], double g[],double h[],int n)
4. p가 포인터라면, *p++와 (*p)++를 참조하여 다음 코드의 출력 결과를 설명하여라.
#include <stdio.h> int main(void) { char a[] = "abc"; char *p; int i; p = a; for(i=0;i<3;++i) printf("%c\n",*p++); printf(" a= %s\n",a); p = a; for(i=0;i<3;++i) printf("%c\n",(*p)++); printf("a = %s\n",a); return 0; }
5. 6.11절에서 제시한 strcpy()를 위한 함수 정의를 잘 살펴보고, 문자열의 끝 부분을 문자열의 앞에 복사하는 것이 가능한지 생각해 보아라. 다음 코드의 출력 결과는 무엇이겠는가? 설명해 보아라.
#include <stdio.h> int main(void) { char a[] = "abcdefghijklmnopqestuvwxyz"; char *p = a; char *q = a + strlen(a) - 3; printf("a = %s\n",a); strcpy (p,q); printf("a = %s\n",a); return 0; }
6. 다음 코드가 출력하는 것을 적어보고, 설명하여라.
printf(“%c%c%c%c%c!\n”,”ghi[1],*(“def”+1),*”abc”+11,”klm”[1],*”ghi”+8);
7. 다음 프로그램은 오류를 포함하고 있다.
#include <stdio.h> #include <string.h> int main(void) { char *p1 = "abc",*p2 = "pacific sea"; printf("%s %s %s \n",p1,p2,strcat(p1,p2)); return 0; } 그 결과는 컴파일러에 따라 달라진다. 어떤 컴파일러를 사용하면, 이 프로그램은 실행시간 오류를 발생시킨다. 그리고, 다른 컴파일러를 사용하면, 다음과 같은 결과가 화면에 출력된다. abcpacific sea abcific sea abc pacific sea 이러한 결과는 의미가 있으며, 컴파일러에 대한 무엇인가를 알려 준다. 프로그래밍 오류는 무엇인가?
Forums:
bzadsdgs
1 저거 N이 먼지 몰라서 잘 모르겠네염...ㄷㄷ
근데 N이 5이하면 b배열 선언할 때 문제가 되겠네요;;
그리고 배열 크기는 정수형인데 왜 3.0을 썼을까
2.괄호를 써야겠네요. 연산자 우선순위가 헷갈리네요.
3. h[i] = f[i] + g[i] 이런 식으로 썼는데 ㄷㄷ
전제조건을 잘 몰라서 버퍼 n + 1크기까지 있다고 가정하고 씀
void add (double f[], double g[],double h[],int n)
{
int i;
for(i = 0; i <=n ; ++i)
{
h[i] = f[i] + g[i];
}
}
4. 연산자 우선순위 관련해서...
5. xyz가 나오지 않나요?
6. 모랄ㄹ모라람
7. 으허읗 저건 당근 안되는데. 코드에 있는 문자열은 힙, 스택과 다른 영역에 독립적으로 존재하고 수정불가능한 걸로 알고있음.
숙제는 스스로
(냉무)
질문들이 전체적으로 '보안'과 무슨 관계가 있는지
질문들이 전체적으로 '보안'과 무슨 관계가 있는지 전혀 알 수가 없는데요;; 저만 그런건가요.
그냥 단순히 C프로그래밍 수업인거 같은데...
그냥 딱 봐도 학교 과제인거 같네요. 질문글 3개 올리신 것 전부다 학교 과제인듯.
진지 먹자면
아마도!! Buffer overflow에 대한 Concept를 이해하기 위한 기초 단계로 시작 하시는게 아닐지요?
댓글 달기