응용포인터

 

 

이중포인터

- 포인터변수의 주소

#include <stdio.h>

int main(){
 int a = 1;
 int* ap;
 int** ap2;

 ap = &a;
 ap2 = &ap;
 
 printf("a\t%d\nap\t%d\nap2\t%d\n", a, ap, ap2);
 printf("*ap\t%d\n*ap2\t%d\n**ap2\t%d\n", *ap, *ap2, **ap2);


 return 0;
}

결과

 

 

 

이중포인터 배열

#include <stdio.h>

int main(){
 int a = 1, b = 2, c = 3;
 int* ap[] = { &a, &b,&c };
 int** ap2 = ap; //배열명이 배열 주소값

 printf("ap\t%d\nap2\t%d\n", ap, ap2);
 printf("*ap[0]:%d\t*ap[1]:%d\t*ap[2]:%d\n", *ap[0], *ap[1], *ap[2]);
 printf("*ap2[0]:%d\t*ap2[1]:%d\t*ap2[2]:%d\n", *ap2[0], *ap2[1], *ap2[2]);
 return 0;
}

결과

 

 

 

다중포인터(삼중포인터)

#include <stdio.h>

int main(){

 int a = 1;
 int* ap = &a;
 int** ap2 = &ap;
 int*** ap3 = &ap2;

 printf("a\t%d\nap\t%d\nap2\t%d\nap3\t%d\n", a, ap, ap2, ap3);
 printf("*ap\t%d\n*ap2\t%d\n*ap3\t%d\n", *ap, *ap2, *ap3);
 printf("**ap2\t%d\n**ap3\t%d\n", **ap2, **ap3);
 printf("***ap3\t%d\n", ***ap3);

 return 0;
}

결과

 

 

 

배열포인터

- 배열 전체를 가리키는 포인터

ex)

int ary[5]    =>    &ary : 배열포인터

 

- (배열포인터) + (주소값) = (주소) + (정수값*배열전체크기)

ex)

ary + 1 => (주소값) + (1*sizeof(ary[0])) = (주소값) + (1*4)

&ary + 1 => (주소값) + (1*sizeof(ary)) = (주소값) + (1*20) 

 

-2차원배열은 배열명이 배열포인터이다.

 

- 따라서 ary+1 => (주소값) + (1*sizeof(ary[0])) = (주소값) + (1*16) 이다.

ex)

ary[1][2]의 값을 배열포인터를 이용해 참조하여 찾기

 

①ary+1 = 100+(1*16)=116

②*(ary+1) = ary[1]

③*(ary+1)+2 = *(ary+1)+(2*4) = 116+8=124

  => 4 : sizeof(ary[1][0])

④*(*(ary+1)+2) = ary[1][2] = 7

 

-이차원 배열포인터 함수

#include <stdio.h>

void func(int(*)[3]); //매개변수는 배열포인터변수

int main(){

 int a[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };

 func(a); //전달인자는 배열명
 
 return 0;
}

void func(int(* ap)[3]){ 
 int i, j;

 for (i = 0; i < 2; i++){
  for (j = 0; j < 3; j++){
   printf("%d", ap[i][j]);
  }
  printf("\n");
 }
}

결과

 

 

 

함수포인터

- 함수명이 함수의 포인터이다.

 

-함수포인터는 함수형태만 같으면 기능에 상관 없이 저장이 가능하다.

ex)

int sum(int, int);        =>fp = sum;

int max(int, int);        =>fp = max;

 

#include <stdio.h>

int sum(int, int);

int main(){ 
 int(* sump)(int, int);
 int result;

 sump = sum;
 result = sump(10, 20);
 printf("result : %d\n", result);

 return 0;
}

int sum(int a, int b){
 return a + b;
}

결과

 

 

-함수포인터 프로그램

#include <stdio.h>

void func(int(*)(int, int));
int sum(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);

int main(){ 
 int select;

 printf("1.두 정수의 합\n");
 printf("2.두 정수의 차\n");
 printf("3.두 정수의 곱\n");
 printf("4.두 정수의 나누기\n");
 printf("선택하세요.");
 scanf_s("%d", &select);
 switch (select){
 case 1: func(sum); break;
 case 2: func(sub); break;
 case 3: func(mul); break;
 case 4: func(div); break;
 }
 return 0;
}
void func(int(*fp)(int, int)){
 int a, b;
 int result;
 
 printf("두 정수값을 입력하세요");
 scanf_s("%d%d", &a, &b);
 result = fp(a, b);
 printf("결과는 : %d\n", result);

}

결과

 

 

 

void포인터

- 가리키는 자료형에 대한 정보가 없는 포인터 => 모든포인터 저장 가능

 

- 사용시 형변환하여 사용

 

- 다양한 형태의 포인터를 전달인자로 받을 수 있는 함수를 만들 수 있다.

#include <stdio.h>
#include <string.h>

void func(char*, void*, void*);

int main(){ 
 int ia = 10, ib = 20;
 double da = 1.5, db = 2.5;

 func("int", &ia, &ib);
 printf("정수 교환 후 : %d, %d\n", ia, ib);
 func("double", &da, &db);
 printf("실수 교환 후 : %.1lf, %.1lf\n", da, db);

 return 0;
}

void func(char* type, void* vp1, void* vp2){
 int ip;
 int dp;

 if (strcmp(type, "int") == 0){ //type에 입력된 값이 int인 경우
  ip = *(int*)vp1;   //vp1을 int*로 형변환 후ip(=A)에 대입
  *(int*)vp1 = *(int*)vp2; //vp2를 int*로 형변환 후 형변환 한vp1에 대입
  *(int*)vp2 = ip;   //형변환한 vp2에 A대입
 }
 if (strcmp(type, "double") == 0){ //type에 입력된 값이 double인 경우
  dp = *(double*)vp1;    //vp1을 double*로 형변환 후ip(=A)에 대입
  *(double*)vp1 = *(double*)vp2; //vp2를 double*로 형변환 후 형변환 한vp1에 대입
  *(double*)vp2 = dp;    //형변환한 vp2에 A대입

 }

}

결과

 

 

'Programming > C' 카테고리의 다른 글

C언어 정리(9)  (0) 2015.08.09
C언어 정리(8)  (0) 2015.08.09
C언어 정리(6)  (0) 2015.08.06
C언어 정리(5)  (0) 2015.07.20
C언어 정리(4)  (0) 2015.07.20

자동변수(지역변수)

- 하나의 함수 내부에 선언한 변수

- 변수의 기억공간이 할당되는 시점은 각 변수가 속해 있는 함수가 호출되어 실행될 때이다

 

예제)13-1

메인함수에서 두 수를 입력받아 곱하는 프로그램

곱하는 작업은 리턴값이 없는 함수를 이용

#include <stdio.h>


void func(int *, int *, int *);     //함수선언

 

int main(){

int a, b, c;

 

printf("두 수를 입력하세요");
scanf_s("%d %d", &a, &b);

 

func(&a, &b, &c);
printf("%d", c);

 

return 0;

}

 

void func(int* a, int* b, int* c){
    *c = (*a)*(*b);   //두 변수 a,b를 곱한 값을 c에 대입한다.
}

 결과)


 

 

정적변수

- 기억공간의 생성과 초기화가 함수의 호출 횟수에 영향을 받지 않는 변수

- 선언 방법 ex) static int sum;

 

예제)13-2

메인에서 배열요소값 출력하는 프로그램

함수가 호출될 때마다 배열요소값 차례로 리턴하는 함수 이용

#include <stdio.h>

 

int* func();    //함수 선언

 

int main(){
    int i;
    int* p;
    for (i = 0; i < 5; i++){
        p = func();    //함수 대입
        printf("%d번째 배열 요소 : %d\n",(i+1), *p);    //배열 출력
    }
    

return 0;

}

 

int* func(){
    int array[] = { 1, 2, 3, 4, 5 };
    static int sum = 0;   //정적변수 선언
    sum++;
    return &array[sum-1];    //배열에 저장된 값 리턴
}

결과)



 

 

외부변수

- 변수를 함수 밖에서 선언한다.

 

예제)13-3

get_next 함수 : 현재 배열 요소의 값을 리턴하고 다음 배열 요소로 이동

get_before 함수 : 현재 배열 요소의 값을 리턴하고 이전 배열 요소로 이동

#include <stdio.h>

 

int array[] = { 1, 2, 3, 4, 5 };    //배열 선언

 

int get_next();        //함수 선언
int get_before();    //함수 선언

 

static int sum = 0;  //외부변수 선언

 

int main(){
 

printf("next함수 호출 : %d\n",get_next());

printf("next함수 호출 : %d\n", get_next());   
    

sum++;

 

printf("before함수 호출 : %d\n", get_before());
printf("before함수 호출 : %d\n", get_before());

 

return 0;

 

}

 

int get_next(){
    sum++;    //배열 인덱스 증가
    return array[sum-1];
}

 

int get_before(){
    sum--;    //배열 인덱스 감소
    return array[sum];
 
}

결과)

 

 

포인터 배열

- 포인터변수들로 만들어진 배열(문자열 상수)

 

예제)14-4

포인터배열을 사용해 가장 긴 단어 출력하기

#include <stdio.h>
#include <string.h>

 

int main(){

 

char* array[] = { "dog", "elephant", "monkey", "rabbit", "tiger" };   //포인터배열 선언
int i, j;
char* max = array[0];

for (i = 0; i < 5; i++){    //max보다 길이가 긴 배열요소를 max에 대입한다.
    if (strlen(array[i]) > strlen(max)) max = array[i];    //strlen() : 문자열 사이즈 측정함수
}
 
printf(max);
printf("\n");

 

return 0;

}

결과)

 

 

'Programming > C' 카테고리의 다른 글

C언어 정리(8)  (0) 2015.08.09
C언어 정리(7)  (0) 2015.08.07
C언어 정리(5)  (0) 2015.07.20
C언어 정리(4)  (0) 2015.07.20
C언어 정리(3)  (0) 2015.07.20

수체계

 

10진수

- 0~9로 이루어진 수체계

 

2진수

- 0과 1로 이루어진 수체계

 

16진수

- 0~9, A~F로 이루어진 수체계

 

16진수 → 2진수

 

24D(2)

D : 13 => 1101(2)

      4 => 100(2)

      2 => 10(2) 

24D(16) = 001001001101(2)

 

 

10진수 → 16진수

 

1324

① 1324/16 = 82.xx

    1324 - (82×16) = 12 : C(16)

② 82/16 = 5.xx

    82 - (5×16) = 2

③ 5/16 = 0.xx

    5 - (0×16) = 5

1324 = 52C(16)

 

 

 

 

메모리

 

- 기본단위 : 1byte

 

주소

0

1

2

3

4

5

6

7

메모리

2A

45

B8

20

8F

CD

12

2E 

 

- 단위

  word 4byte    double word 4byte    quad word 8byte    pharagraph 16byte

 

- 문자는 문자코드를 사용하여 저장

  ASCII        하나의 문자를 인코딩하기 위해 1byte 사용

  Unicode    하나의 문자를 인코딩하기 위해 2byte(1worD) 사용(ASCII보다 더 많은 문자 맵핑 가능)

 

 

 

Segment:Offset

 

- 메모리가 Segment라고 불리는 바이트의 집합으로부터 분리

- Segment는 Offset번호를지정하여 메모리에 접근

- 데이터에 접근할 때 Segment번호:Offset번호의 리퀘스트를 보낸다

  ex)물리적 주소로 변환하기 : 1234:4321 => 1234×10h+4321 = 16661

 

레지스터

- 데이터를 저장할 수 있는 작은 영역

- 프로그램 실행 중 정보를 저장

- 레지스터 내의 저보 접근이 메모리에 접근하는 것보다 빠름

-레지스터 번호는 제한되어 있다.

 

일반적인 특성을 위한 레지스터(16비트로 구성) :

종류

구성 

용도 

AX

AH, AL

수학연산, I/O연산, INT 21

BX

BH, BL

Base 또는 Pointer

CX

CH, CL

루프 or 반복

DX

DH, DL

다양한 데이터, 문자 출력

- 386이 나온 경우 새로운 레지스터 EAX, EBX, ECX, EDX가 추가됨(32비트로 확장)

EAX

               

AH

AL

AX

 

 

 

 

세그먼트 레지스터 :

종류

용도

CS

코드를 저장하는 메모리 블록

DS

데이터를 저장하는 메모리 블록

EX

비디오 관련된 것을위해 사용

SS

루틴으로부터 리턴 어드레스 저장을 위해 프로세서에 의해서 사용되는 레지스터

 

 

인덱스 레지스터 :

종류

용도 

SI 

문자열/배열의 소스를 지정하기 위해 사용

DI 

문자열/배열의 목적지를 지정하기 위해 사용

IP

다음 명령의 주소를 저장하고 직접적으로 변경할 수 없음

 

 

 

문자열의 처리

 

char* fruit = "apple";    //문자열 상수"apple"을 포인터변수에 대입

 

/* --------------------------------------------

for(int i=0;i<sizeof(fruit);i++){

printf("%s", fruit[i]);              //결과 : apple

}

--------------------------------------------*/

/* -------------------------------------------------------------------------------

fruit[0] = 'a'

fruit[1] = 'p'

fruit[2] = 'p'

fruit[3] = 'l'

fruit[4] = 'e'

--------------------------------------------------------------------------------*/

 

while(*fruit != \0){             //*fruit은 포인터변수 fruit(주소값)을 참조. 즉, apple과 같음

printf("%s\n", fruit);    //fruit에 저장된 값을 문자형으로 출력

fruit++;                       //주솟값을 1 증가

}

따라서 결과는

apple

pple

ple

le

e 

 

 

 

중요한 문자열 처리 함수

 

문자배열에 문자열상수를 저장하기

 

 

void user_strcpy(char* des, char* src)        //des : 선언한 배열 대입 & src : 저장할 문자열 상수 대입

{

while(*src != '\0'){                          

*des = *src;                                //선언한 배열 자리에 저장할 문자열요소 대입

src++;                                        //주소값 1씩 증가

des++;                                       //주소값 1씩 증가

}

*des='\0;                                       //마지막 자리 NULL값 대입

}

이 함수를 사용한다.

 

 

 

문자열 복사함수

 

"string.h"헤더파일에 선언되어있는 char* strcpy(char* , char* ) 함수를 사용한다.

 

...

#include<string.h>          //선언

...

char str1[20] = "apple";

char str2[20] = "banana";

char temp[20];                //임시 저장 배열 선언

 

strcpy(temp, str1);          //temp에 str1 저장

strcpy(str1, str2);           //str1에 str2 저장

strcpy(str2, temp);         //str2에 temp(원래 str1) 저장 

 

 

 

문자열의 길이를 계산하는 함수

 

unsigned int strlen(char* ) 함수를 사용한다.

 

char fruit[80] = "apple";

int len;

len = strlen(fruit);

printf("%d", len);                //5

printf("%d", sizeof(fruit));    //80

 

 

 

문자열을 비교하는 함수

 

"string.h"헤더파일에 선언되어 있는 int strcmp(char* str1, char* str2) 함수를 사용한다.

 

크기비교 

str1 > str2

str1 < str2

str1 == str2

리턴값

1

-1

0

 

...

#include<string.h>          //선언

... 

char str1[20] = "banana";

char str2[20] = "apple"; 

char temp[20];                    //임시 저장 배열 선언

int res;

 

res=strcmp(str1, str2);

if(res>0){                          //str1 > str2인 경우

strcmp(temp, str1);       //temp에 str1 저장

strcmp(str1, str2);        //str1에 str2 저장

strcmp(str2, str1);        //str2에 temp(원래 str1) 저장 

}

 

 

 

두 개의 문자열을 붙이는 함수

 

"string.h"헤더파일에 선언되어 있는 char* strcat(char* str1, char* str2)함수를 사용한다.

 

...

#include<string.h>          //선언

... 

char fruit[80] = "straw";

 

strcat(fruit, "berry"); 

 

 

'Programming > C' 카테고리의 다른 글

C언어 정리(7)  (0) 2015.08.07
C언어 정리(6)  (0) 2015.08.06
C언어 정리(4)  (0) 2015.07.20
C언어 정리(3)  (0) 2015.07.20
C언어 정리(2)  (0) 2015.07.20

포인터

 

int a=10;           //a에 10 저장

int* ap = &a;     //포인터변수 ap에 변수a의 주솟값 저장

    //=>int* 로 선언된 포인터 변수는 int형 변수의 주솟값만을 저장할 수 있다.

 

/* ---------------------------------------

↓주소값 : 48                          ↓주소값 : 52         

       52                    →                 10       

포인터변수 ap    (가리킨다)      int형 변수 a

--------------------------------------- */

 

printf("%d", a);        //a값 출력 52

printf("%d", *ap);    //printf("%d", *&a);와 같으므로 printf("%d", a);이다. 따라서 a값 출력 52

    //=>포인터 변수 앞에 *을 붙이면 포인터 변수가 가리키는 곳에 저장된 값을 가져온다.(*과 &가 상쇄됨)

printf("%u", ap);     //printf("%d", &a);와 같다. 따라서 a의 주솟값(ap)출력 48

printf("%u", &a);    //a의 주솟값을 출력 52

printf("%u", &ap);  //ap의 주솟값 출력 48

 

 

배열 포인터

 

int ary[5] = {10, 20, 30, 40, 50};

int* ap = &ary[0];     //&ary[0] = ary 이므로 ary[0] = *ary = *ap

 

/* -----------------------------------------------------------------------------------------------------

ary[0] = 10

ary[1] = 20

ary[2] = 30

ary[3] = 40

ary[4] = 50

↑주소값(ap) : 36        ↑40                           ↑44                          ↑48                          ↑52

  = &ary[0]                  = &ary[0]+1                = &ary[0]+2               = &ary[0]+3               = &ary[0]+4

------------------------------------------------------------------------------------------------------*/

 

printf("%u", ary);      //36

printf("%u", ary+1);   //40

printf("%u", ary+2);   //44

printf("%u", ary+3);   //48

printf("%u", ary+4);   //52

 

'Programming > C' 카테고리의 다른 글

C언어 정리(6)  (0) 2015.08.06
C언어 정리(5)  (0) 2015.07.20
C언어 정리(3)  (0) 2015.07.20
C언어 정리(2)  (0) 2015.07.20
C언어 정리(1)  (0) 2015.07.20

배열

 

1차원 배열 선언

int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};        //10개짜리 정수형 배열

 

a[10]배열

a[0] = 1

a[1] = 2

a[2] = 3

a[3] = 4

a[4] = 5

a[5] = 6

a[6] = 7

a[7] = 8

a[8] = 9

a[9] = 10

 

=> 배열의 인덱스값은 0부터!

 

 

2차원 배열 선언

int b[2][2] = {1, 2, 3, 4}       //2*2 정수형 배열

 

a[2][2]배열

a[0][0] = 1

a[0][1] = 2

a[1][0] = 3

a[2][2] = 4

 

 

문자열(문자 + 배열)

char c[]= "abcdefg\0";    //크기가 7인 문자형 배열 선언

NULL문자(\0)를 입력 함으로써 문자열의 끝을 알려줌

 

c[7]배열

c[0] = 'a'

c[1] = 'b'

c[2] = 'c'

c[3] = 'd'

c[4] = 'e'

c[5] = 'f'

c[6] = 'g'

'Programming > C' 카테고리의 다른 글

C언어 정리(5)  (0) 2015.07.20
C언어 정리(4)  (0) 2015.07.20
C언어 정리(2)  (0) 2015.07.20
C언어 정리(1)  (0) 2015.07.20
Exercise 10-1  (0) 2015.05.07

IF문

 

기본

if(조건)    //조건 : 예)부등식

{

//조건을 만족할 때 수행할 것들

}

else

{

//조건을 만족하지 않는 모든 경우에 수행할 것들

}

 

항상 실행

if(true)    //true대신 1 이상의 정수 가능

{

//수행할 것들

}

 

실행 안함

if(false)    //false대신 0 가능

{

 

}

 

 

SWITCH문

 

기본

switch(변수)

{

case 1 :     //첫 번째 경우

//수행할 것들

break;

case 2 :    //두 번째 경우

//수행할 것들

break;

default :    //첫 번째, 두 번째 모두 아닌 경우

//수행할 것들

}

 

 

WHILE문

 

기본

while(조건)

{

//수행할 것들

}

 

항상 실행

while(true)    //true 대신 1사용 가능

{

//수행할 것들

}

 

우선 do를  한 번 실행한 후 조건에 맞는 경우 do 실행

do

{

//수행할 것들

} while(조건);

 

 

FOR문

 

기본

for(초기 값 ; 조건식 ; 증감식)

{

//수행할 것들

}

 

계속 실행

for(;;)

{

//수행할 것들

}

'Programming > C' 카테고리의 다른 글

C언어 정리(4)  (0) 2015.07.20
C언어 정리(3)  (0) 2015.07.20
C언어 정리(1)  (0) 2015.07.20
Exercise 10-1  (0) 2015.05.07
Exercise 9-3  (0) 2015.05.07

 

 형식 지정자

의미

예 

%d 

정수를 10진수로 출력 

··· -2, -1, 0, 1, 2 ···

 %f

소수점이 있는 실수로 출력

 0.1, 0.05, 3.14

 %c

문자 형태로 출력

 a, C

 %s

문자열 형태로 출력

 sweet, honey

 

 

 

자료형

설명

바이트수 

범위 

정수형

부호있음

short

short형 정수 

2

-32768 ~ 32767

int

정수

4

-2147483648 ~ 2147483647

long

long형 정수

4

-2147483648 ~ 2147483647

부호없음

unsigned short

부호없는 short형 정수

2

0 ~ 65535

unsigned int

부호없는 정수

4

0 ~ 4294967295

unsigned long

부호 없는 long형 정수

4

0 ~ 4294967295 

char

문자 및 정수

1

-128 ~ 127

문자형

부호있음

unsigned char

문자 및 부호없는 정수

1

0 ~ 255

부호없음

float 

단일정밀도 부동소수점

4

1.2E-38 ~ 3.4E28

부동소수점형

double

두배정밀도 부동소수점

8

2.2E-308 ~ 1.8E308

 

 

 

'Programming > C' 카테고리의 다른 글

C언어 정리(3)  (0) 2015.07.20
C언어 정리(2)  (0) 2015.07.20
Exercise 10-1  (0) 2015.05.07
Exercise 9-3  (0) 2015.05.07
Exercise 9-1  (0) 2015.05.07

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>도서 대출 예약</title>
<style>
#a{

 border-radius : 10px;
 width : 500px;
 background: #f8ffe8; /* Old browsers */
 background: linear-gradient(to bottom,  #f8ffe8 0%,#e3f5ab 33%,#b7df2d 100%); /* W3C */
 filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f8ffe8', endColorstr='#b7df2d',GradientType=0 ); /* IE6-9 */
 
}
 #b{
 border : 3px solid red;
 border-radius : 5px;
 background : pink;
  }
</style>
</head>
<body>
<form>
<fieldset id="a">
 <legend id="b">도서 대출 예약</legend>
 <span>
 <label for="n">성명 : </label>
 <input type="text" id="n" required>
 </span>
 <br>
 
 <label for="n">전화 : </label>
 <input type="text" id="n" placeholder="00*-000-*0000">
 <br>
 
 <label for="n">이메일 : </label>
 <input type="email" id="n" placeholder="***@***.***">
 <br>
 
 <label for="n">도서명 : </label>
 <input type="text" id="n" required>
 <br>
 
 <label for="n">예약 희망일 : </label>
 <input type="date" id="n" required>
 <br>
 
 <label for="n">수령시간 : </label>
 <input type="time" id="n" required>
 <label for="n">에서</label>
 <input type="time" id="n" required>
 
 <label for="n">사이</label>
 <br>
 
 <hr>
 
 <input type="submit" value="예약하기">
</fieldset>

 


</form>

 

 

</body>
</html>

 

<결과>

 

 

'Programming > HTML5' 카테고리의 다른 글

[8장]HTML5 태그(5) - 멀티미디어 태그  (0) 2015.03.20
[7장]HTML5 태그(4) - 멀티미디어 태그  (0) 2015.01.28
[6장]HTML5 태그(3)  (2) 2015.01.27
[5장]File Zilla 사용법  (0) 2015.01.24
[4장]HTML5 태그(2)  (0) 2015.01.24

 ID : level4 PW : level3에서 구한 패스워드 입력 후 hint를 읽는다.

 

 

 

 

 

백도어가 있는 /etc/xinetd.d로 이동한다.

이때 backdoor파일을 읽어보면 finger서비스를 실행하게 되어있다.

유저는 level5이고

서버가 /home/level4/tmp/backdoor로 설정되어 있으므로

/home/level4/tmp로 이동하여 backdoor파일이 존재하는지 확인한다.

 

하지만 /home/level4/tmp경로 내에 backdoor파일이 존재하지 않으므로

level5의 패스워드를 얻을 수 있도록 하는 backdoor파일을 만든다.

 

 

 

 

 

 

아래 코드를 작성 해준 후 gcc로 컴파일 시킨다.

 

 

 

 

 

 

 

그리고 finger @localhost명령으로 backdoor를 실행시켜주면 level5의 패스워드를 얻을 수 있다.

 

 

'Challenge > FTZ' 카테고리의 다른 글

level7  (0) 2016.01.20
level6  (0) 2016.01.20
level3  (0) 2015.06.25
level2  (0) 2015.06.25
level1  (0) 2015.06.25

+ Recent posts