堆栈溢出技术入门到精通.docVIP

  • 2
  • 0
  • 约4.17万字
  • 约 46页
  • 2018-10-12 发布于江苏
  • 举报
堆栈溢出技术入门到精通

堆栈溢出技术从入门到精通 本讲的预备知识: 首先你应该了解intel汇编语言,熟悉寄存器的组成和功能。你必须有堆栈和存储分配方面 的基础知识,有关这方面的计算机书籍很多,我将只是简单阐述原理,着重在应用。其次, 你应该了解linux,本讲中我们的例子将在linux上开发。 1:首先复习一下基础知识。 从物理上讲,堆栈是就是一段连续分配的内存空间。在一个程序中,会声明各种变量。静态 全局变量是位于数据段并且在程序开始运行的时候被加载。而程序的动态的局部变量则分配 在堆栈里面。 从操作上来讲,堆栈是一个先入后出的队列。他的生长方向与内存的生长方向正好相反。我 们规定内存的生长方向为向上,则栈的生长方向为向下。压栈的操作push=ESP-4,出栈的 操作是pop=ESP+4.换句话说,堆栈中老的值,其内存地址,反而比新的值要大。 请牢牢记住这一点,因为这是堆栈溢出的基本理论依据。 在一次函数调用中,堆栈中将被依次压入:参数,返回地址,EBP。如果函数有局部变量, 接下来,就在堆栈中开辟相应的空间以构造变量。函数执行结束,这些局部变量的内容将被 丢失。但是不被清除。在函数返回的时候,弹出EBP,恢复堆栈到函数调用的地址,弹出返回 地址到EIP以继续执行程序。 在C语言程序中,参数的压栈顺序是反向的。比如func(a,b,c)。在参数入栈的时候,

文档评论(0)

1亿VIP精品文档

相关文档