栈溢出原理讲解.docVIP

  • 1
  • 0
  • 约4.96千字
  • 约 9页
  • 2023-11-13 发布于浙江
  • 举报
栈溢出原理讲解 栈溢出原理讲解 主要针对堆栈溢出的攻击实现 一:基础知识 计算机内存运行分配的区域分为3个 程序段区域:不允许写的 数据段区域:静态全局变量是位于数据段并且在程序开始运行的时候被加载 堆栈区域:放置程序的动态的用于计算的局部和临时变量则分配在堆栈里面和在过程调用中压入的返回地址数据。堆栈是一个先入后出的队列。一般计算机系统堆栈的方向与内存的方向相反。压栈的操作push,ESP,4,出栈的操作是pop=ESP+4. 在一次函数调用中,堆栈中将被依次压入:参数,返回地址,EBP。如果函数有局部变量,接下来,就在堆栈中开辟相应的空间以构造变量。函数执行结束,这些局部变量的内容将被丢失。但是不被清除。在函数返回的时候,弹出EBP,恢复堆栈到函数调用的地址,弹出返回地址到EIP以继续执行程序。 在C语言程序中,参数的压栈顺序是反向的。比如func(a,b,c)。在参数入栈的时候,是:先压c,再压b,最后a.在取参数的时候, 指令执行的图例: 指令区域 执行程序区 0 1 2 3 0 4 8 调用100处的函数,参数1(3位),2(10位) C 10 0 1 2 3 100 执行处理 104 108 10C 110 返回调用 堆栈区域 0 1 2 3 如果EBP分配的空间不够操作就是产生溢出的地方 200 保存以前的EBP4

文档评论(0)

1亿VIP精品文档

相关文档