2012-07-11 5 views
-4

여기에 프로그램의 소스 코드가있다.이 터미널에서 나는 무엇을하고 있는가? : C 프로그래밍

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

int check_authentication(char *password) 
{ 
if(strcmp(password, "brillig") == 0) 
return 1; 

if(strcmp(password, "outgrabe") == 0) 
return 1; 

    return 0; 
} 

int main(int argc, char *argv[]) 
{ 
if(argc < 2) 
{ 
printf("Usage: %s <password>\n", argv[0]); 
exit(0); 
    } 

    if(check_authentication(argv[1])) 
    { 
    printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); 
    printf(" Access Granted.\n"); 
    printf("-=-=-=-=-=-=-=-=-=-=-=-=-=-\n"); 
    } 
     else 
    { 
    printf("\nAccess Denied.\n"); 
    } 
    return 0; 
} 

무엇이 이미지의 프로그램을 정확히 수행하고 있습니까? http://i.imgur.com/7FF9x.png.

Windows에서이 프로그램을 실행하려고하면 아무 것도 입력 할 수 없지만 UBUNTU에서는 뭔가 입력하는 것 같지만 실제로 무슨 일이 일어나는지는 잘 모르겠습니다.

이 내가 창문 http://i.imgur.com/0X8ZO.png에서 실행할 경우 발생하는 것입니다, 그런데

프로그램의 전체 포인트는 버퍼 오버 플로우를 입증했다. 스크린 샷에서 촬영


리눅스 호출, 상기 영업 이익의 코멘트에서

$ ./auth_overflow AAAAAAAAAAAAAAAA 

Access Denied. 

$ ./auth_overflow AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 

-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    Access Granted. 
-=-=-=-=-=-=-=-=-=-=-=-=-=- 
+4

어? "프로그램에서 내가 뭘하고 있는거야?" 디버거를 사용하여 프로그램의 실행을 추적하거나 인쇄 문을 추가 할 수없는 이유는 무엇입니까? –

+2

당신이 내 친구만큼 혼란 스럽습니다 ... –

+0

당신은 ... 명령 줄에 매개 변수를 제공하고 있습니까? –

답변

2

:

좋아, 나는이이 이 왜 가장 가능성이있는 C++ 배경에서 오는거야 나를 혼란스럽게합니다. 나는 단지 codeblocks에서 프로그램을 입력하고 실행 및 빌드 할 때 왜 아무것도 입력 할 수 없는지 묻는 것입니다.

당신은 당신의 프로그램이 실행될 때 명령 줄에 제공 PARAMATERS의 목록입니다 argv로부터 입력을 읽고있다. IDE에 내장 된 'run'명령어를 사용할 때 프로그램은 명령 행 인자없이 실행됩니다 (기본적으로 적어도). IDE를 통해 프로그램을 실행하는 대신 명령 프롬프트를 열고 수동으로 프로그램을 실행하십시오. 그런 식으로 매개 변수를 사용하여 프로그램을 실행할 수 있습니다 (예 : Linux 쉘에서와 같이). argv에 프로그램을 읽을 수있는 내용이 있습니다.

+0

예, 이것이 제 질문에 대한 대답이었습니다. – Loseb

관련 문제