보안프로그래밍 몇가지 문제풀이 관련3

necrid의 이미지

보안프로그래밍을 공부하고 있는데요.
다른분들이 생각하는 문제의 답변을 듣고
공부하는데 도움을 받고 싶어서 올리게 되었습니다.

안전한 정수 사용 방법을 참고하여 아래 프로그램 실행 결과에 대해 설명하시오.

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
이러한 결과는 의미가 있으며, 컴파일러에 대한 무엇인가를 알려 준다. 프로그래밍 오류는 무엇인가?

익명 사용자의 이미지

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. 으허읗 저건 당근 안되는데. 코드에 있는 문자열은 힙, 스택과 다른 영역에 독립적으로 존재하고 수정불가능한 걸로 알고있음.

jick의 이미지

(냉무)

viper9의 이미지

질문들이 전체적으로 '보안'과 무슨 관계가 있는지 전혀 알 수가 없는데요;; 저만 그런건가요.

그냥 단순히 C프로그래밍 수업인거 같은데...

그냥 딱 봐도 학교 과제인거 같네요. 질문글 3개 올리신 것 전부다 학교 과제인듯.

익명 사용자의 이미지

아마도!! Buffer overflow에 대한 Concept를 이해하기 위한 기초 단계로 시작 하시는게 아닐지요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.