这是程序的源代码。
#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.
-=-=-=-=-=-=-=-=-=-=-=-=-=-
答案 0 :(得分:2)
来自OP的评论:
好吧,我来自C ++背景,这很可能就是为什么 令我困惑。我只是问为什么我不能输入任何东西 在codeblocks中键入程序并点击run and build。
您正在从argv
读取输入,argv
是程序运行时在命令行上提供的参数列表。当您使用IDE中内置的“run”命令时,程序将在没有命令行参数的情况下运行(至少默认情况下)。不要通过IDE运行程序,而是打开命令提示符并手动运行程序。这样,您可以使用参数运行程序(就像在Linux shell中一样),以便{{1}}中有一些内容供您的程序读取。