当前位置: 技术问答>linux和unix
LINUX下的缓冲区溢出和WINDOWS下的缓冲区溢出都有什么区别?
来源: 互联网 发布时间:2015-10-30
本文导语: LINUX下的缓冲区溢出和WINDOWS下的缓冲区溢出都有什么区别? | up | 缓冲区溢出的原理是一样的。 缓冲区溢出的原理是:向一个有限空间的缓冲区拷贝了过长的字符串,覆盖相...
LINUX下的缓冲区溢出和WINDOWS下的缓冲区溢出都有什么区别?
|
up
|
缓冲区溢出的原理是一样的。
缓冲区溢出的原理是:向一个有限空间的缓冲区拷贝了过长的字符串,覆盖相邻的存储单元,会引起程序运行失败。因为自动变量保存在堆栈当中,当发生缓冲区溢出的时候,存储在堆栈中的函数反回地址也会被覆盖从而无法从发生溢出的函数正常返回(返回地址往往是一个无效的地址),在这样的情况下系统一般报告: “core dump”或“segment fault”。严重的是:如果覆盖缓冲区的是一段精心设计的机器指令序列,它可能通过溢出,改变返回地址,将其指向自己的指令序列,从而改变该程序的正常流程。
几乎所有UNIX/Linux版本中都或多或少地存在这样的问题。事实上针对windows 98/NT的缓冲区溢出攻击也是很常见的。
缓冲区溢出的原理是:向一个有限空间的缓冲区拷贝了过长的字符串,覆盖相邻的存储单元,会引起程序运行失败。因为自动变量保存在堆栈当中,当发生缓冲区溢出的时候,存储在堆栈中的函数反回地址也会被覆盖从而无法从发生溢出的函数正常返回(返回地址往往是一个无效的地址),在这样的情况下系统一般报告: “core dump”或“segment fault”。严重的是:如果覆盖缓冲区的是一段精心设计的机器指令序列,它可能通过溢出,改变返回地址,将其指向自己的指令序列,从而改变该程序的正常流程。
几乎所有UNIX/Linux版本中都或多或少地存在这样的问题。事实上针对windows 98/NT的缓冲区溢出攻击也是很常见的。
|
mark
|
没什么说的,原理差不多,不过慎用。