繁体   English   中英

简单 C 程序中的缓冲区溢出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM