gpt4 book ai didi

c - 为什么会发生这种溢出?

转载 作者:行者123 更新时间:2023-11-30 18:17:53 25 4
gpt4 key购买 nike

在下面的代码中:

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

int check_authentication(char *password) {
char password_buffer[16];
int auth_flag = 0;

strcpy(password_buffer, password);

if(strcmp(password_buffer, "brillig") == 0)
auth_flag = 1;
if(strcmp(password_buffer, "outgrabe") == 0)
auth_flag = 1;

return auth_flag;
}

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("Access Denied\n");
}
}

如果我运行诸如“AAAAAAAAAAAAAAAAAAA”之类的内容,不知何故,某些内容会溢出,并导致程序以授予访问权限的方式运行。我很困惑,因为当我运行 gdb 调试器时,auth_flag 位于内存中的 password_buffer 之前,并且从未溢出。

编辑:我知道文本不适合缓冲区,但我正在尝试缓冲区溢出以及如何以受控方式利用它们。是的,我们可以使数组更大,但这不是重点

我想知道是否有人能够告诉我为什么会发生这种情况/是什么导致了这种情况。

最佳答案

AAAAAAAAAAAAAAAAAAA 的大小为 20。然后,您使用 strcpy 将其复制到大小为 16 的字符数组。尝试增加您的password_buffer 大小。

To avoid overflows, the size of the array pointed by destination shall be long enough to contain the same C string as source (including the terminating null character), and should not overlap in memory with source.

http://www.cplusplus.com/reference/cstring/strcpy/

关于c - 为什么会发生这种溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34259000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com