【原创】初谈缓冲区栈溢出
作者 作者:admin-神风 本文章是为了写出来让人们交流学习的~~末尾我会放上我写这篇文章时所遇到的问题。希望看完本帖的人可以在末尾评论留言自己的问题和解决的答案和思路~ 黑客是一种分享的精神!但现在看来却是在慢慢消失,所以--我希望看完本帖的人们能传递下去! 由于技术问题 本帖有错误的地方望各位大牛斧正! 缓冲区溢出介绍 缓冲区溢简单说,是大的数据存入了小缓冲区,又不对存入数据进行边界判断,最终导致小缓冲区被撑爆。大的数据污染了小缓冲区附近的内存。污染的内存可能带来改变程序控制流、夺取操作系统、禁止访问等多种结果。就好比一杯水,倒满了水 多余的就溢出到外面来了。 缓冲区溢出主要可以分成三种:静态数据溢出、栈溢出和堆溢出。产生这三种不同的溢出根源在于win的内存结构;win的内存可以被分成两个层面:物理内存和虚拟内存。我们一般看到的其实只是windows的虚拟内存。在XP下windows会给所有进程都分配4G内存(无论物理内存真实多大);windows会把4G内存分成代码区、数据区、堆区、栈区。数据区存储的是进程的全局变量。如果利用这里的数据进行缓冲区溢出那么就被称为静态数据溢出。同样利用栈区和堆区进行缓冲区溢出,则相应被称作栈溢出和堆溢出。静态数据溢出虽然技术难度低但是灵活性和可以利用范围低,所以本文就不介绍了。堆溢出相对复杂,将在别的文章介绍