[英]Buffer-Overflow in simple C program
我写了一个 C 程序,它检查是否输入了某个密码,并在密码正确时返回一个名为 Secret 的文件(至少这是它应该做的)。 在测试过程中,我发现当输入数字 1 (111111111111111) 的 15 倍作为输入时,它的行为不符合预期,文件 Secret 显示得更加困难,这不是存储在文件中的密码。
我添加了删除所有非字母字符的 sanitize 方法,但显然没有解决它。
我真的不明白为什么会出现溢出以及哪些变量(及其内存)受到影响。
c 中的字符串的最后一个字符必须为 '\0'(空终止符)。 这意味着,当您执行这样的分配时:
char pass[15];
您确实为 null 终止符分配了 14 个字符和 1 个字符。
strcpy
基于此工作。 如果您的字符串没有终止符,您将获得缓冲区溢出。
查看 15 1 的密码,很明显您没有让空间放置 null 终结器
为避免这种情况,请开始使用strncpy function 及其系列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.