-4

这是程序的源代码。

#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 中,我想我正在输入一些内容,但我不确定发生了什么。

如果我在 Windows http://i.imgur.com/0X8ZO.png中运行它会发生这种情况,

顺便说一句,程序的重点是演示缓冲区溢出。


Linux 调用,截取自屏幕截图:

 $ ./auth_overflow AAAAAAAAAAAAAAAA

Access Denied.

 $ ./auth_overflow AAAAAAAAAAAAAAAAAAAAAAAAAAAAA

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

1 回答 1

2

从OP的评论:

好吧,我来自 C++ 背景,这很可能是这让我感到困惑的原因。我只是问为什么当我在代码块中键入程序并点击运行和构建时我不能输入任何内容。

您正在从 读取输入argv,这是程序运行时在命令行上提供的参数列表。当您使用 IDE 中内置的“运行”命令时,您的程序将在没有命令行参数的情况下运行(至少默认情况下)。不要通过 IDE 运行程序,而是打开命令提示符并手动运行程序。这样,您可以使用参数运行程序(就像您在 Linux shell 中所做的那样),argv以便您的程序可以读取一些内容。

于 2012-07-11T23:12:15.680 回答