如何解释这个程序中的缓冲区溢出?

时间:2015-03-06 17:16:28

标签: c buffer overflow

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

int check_authentication(char *password){
    int auth_flag = 0;
    char password_buffer[16];
    strcpy(password_buffer, password);
    if(strcmp(password_buffer, "password1") == 0){
        auth_flag = 1;

    }
    return auth_flag;
}

int main(int argc, char *argv[]){
    if(check_authentication(argv[1])){
        printf("Access granted!");
    }
    else{
        printf("Access denied!");
    }
}

当我输入一个29字节或更多字节的密码时,我获得了访问权限。 在这种情况下,它可能需要16个字节(password_buffer)+ 12个字节(“密码”)= 28个字节。

当我写char password_buffer[12];时,只需要密码就可以拥有超过13个字节,并获得访问权限。

我不明白,“密码”在哪里?

0 个答案:

没有答案