您的位置:首页 > 编程语言

实验代码之bufdemo.c

2019-05-27 21:43 225 查看

本章实验主要是将一个限制输入为4位的字符数据进行输入,如果输入数据在限制范围以内,则以正常字符输出,如果超出限制范围,则会侵占其它内存,从而报错。

/* Demonstration of buffer overflow */
#include <stdio.h>
#include <stdlib.h>

/* Implementation of library function gets() */
char *gets(char *dest)
{
int c = getchar();
char *p = dest;
while (c != EOF && c != '\n') {
*p++ = c;
c = getchar();
}
*p = '\0';
return dest;
}

/* Read input line and write it back */
void echo()
{
char buf[4];  /* Way too small! */
gets(buf);
puts(buf);
}

void call_echo()
{
echo();
}

/*void smash()
{
printf("I've been smashed!\n");
exit(0);
}
*/

int main()
{
printf("Type a string:");
call_echo();
return 0;
}

以下是正常输入限制4位字符以内代码:

zhaoxiaoan@zhaoxiaoan:/mnt/hgfs/CS2$ ./bufdemo
Type a string:0123
0123
zhaoxiaoan@zhaoxiaoan:/mnt/hgfs/CS2$ ./bufdemo
Type a string:aaaa
aaaa

可知其正常。

以下是超出限制字符代码:

zhaoxiaoan@zhaoxiaoan:/mnt/hgfs/CS2$ ./bufdemo
Type a string:012345
012345
*** stack smashing detected ***: <unknown> terminated
已放弃 (核心已转储)

显然发生了错误并进行报错。
这一段代码逻辑应该可以用于做一些简单的判断,减少时间成本,并且优化一些过程运算。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: