-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

From the OP's comment:

Alright, I'm coming from a C++ background this is most likely why this is confusing me. I'm just asking is why can't I input anything when I type the program in codeblocks and hit run and build.

You are reading your input from argv, which is the list of paramaters provided on the command-line when your program is run. When you use the 'run' command built into your IDE, your program is run with no command-line arguments (by default, at least). Instead of running the program through your IDE, open a command prompt and run the program manually. That way, you can run the program with parameters (like you did in the Linux shell) so that there is something in argv for your program to read.

于 2012-07-11T23:12:15.680 に答える