- 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)。在参数入栈的时候,
您可能关注的文档
最近下载
- 2026年福建省中考数学试卷(含答案及解析).docx
- 21.2.2 二次函数y=ax^2+k的图象和性质(作业)-【上好数学课】2020-2021学年九年级上册同步备课系列(沪科版).docx VIP
- CSCEJX0002-2017检维修能力评定技术规范 第2部分:评定条件.docx VIP
- (高清版)DB51∕T 5026-2001 成都地区建筑地基基础设计规范 .pdf VIP
- 中储粮面试题目及答案.doc VIP
- 2025年秋新人教版三年级上册数学全册同步教案.docx
- 臀位顺产分娩护理查房.pptx VIP
- 盘扣式悬挑脚手架施工方案验收要求.doc VIP
- Q-GDW10370-2016配电网技术导则20170324实施.pdf
- 不锈钢雨棚施工方案.docx VIP
原创力文档

文档评论(0)