首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言库函数中的BUG

在C语言中的库函数中有一个获取字符串的函数------gets(),大家都知道这个函数的用法。

charstr[5];

gets(str);

puts(str);

有的书上只介绍了这个函数的用法,也提醒了注意使用。我认为不管在什么情况下都不要使用这个函数,因为它就是一个BUG。你在写程序时使用了这个函数,你知道你要输入的字符串不会越界,所以不会有问题,而且就算是越界了顶多也就是程序崩溃而已;但是如果你是用在一个项目里面,那么问题就大了,别有用心的人就会利用缓冲区溢出植入恶意代码,靠的就是gets(string)函数。

这是man page手册文档,这里说得很清楚,Never use this function.

char*gets(char*s);

这是函数原型,它的返回类型是一个指针。我们知道,指针可以指向内存中任意一块区域,这样就不难理解那些高手为什么可以利用缓冲区溢出做很多事情了,有兴趣的读者可以参考《Smash Stack》。C语言库函数中还有一些函数也能导致缓冲区溢出,比如说strcat和strcpy,只是它们的问题没有gets严重,因为这是可控的。

看文档的描述,这个函数是多么地“可怕”,所以千万不要使用gets函数。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180329G1JMBP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券