gets()函数的危险操作
分别在window环境和Linux环境中分析
1)window环境
采用visual studio2017实验:

结果:window中直接报错,终止运行。
2)Linux环境


结果:输入超过定义长度的字符串,gets()函数可以接收、输出,并且检测到堆栈应被破坏
原理分析:
当输入的字符串超过了定义的变量后,多出的数据会存入申请地址之后的地址,覆盖掉了内存中原有的数据,因此会对其他数据造成未知的破坏。
如果覆盖到了系统定义的数据,则会直接报错,不能实现覆盖的操作。
本文通过在Windows和Linux环境下实验,详细分析了gets()函数在处理超出定义长度字符串时的安全隐患,揭示了其可能导致的堆栈破坏及系统错误。
分别在window环境和Linux环境中分析
1)window环境
采用visual studio2017实验:

结果:window中直接报错,终止运行。
2)Linux环境


结果:输入超过定义长度的字符串,gets()函数可以接收、输出,并且检测到堆栈应被破坏
原理分析:
当输入的字符串超过了定义的变量后,多出的数据会存入申请地址之后的地址,覆盖掉了内存中原有的数据,因此会对其他数据造成未知的破坏。
如果覆盖到了系统定义的数据,则会直接报错,不能实现覆盖的操作。
970
2175

被折叠的 条评论
为什么被折叠?