对Windows环境下堆溢出和栈溢出的研究.pdfVIP

对Windows环境下堆溢出和栈溢出的研究.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
维普资讯 第20卷 第 l期 四川理工学院学报 (自然科学版) Vol、20No.1 JOURNALOFSICHUAN UNIVERSITYoF 2007年 2月 SCIENCE&ENGINEERING(NATURALSCIENCEEDITION) Feb.2007 文章编号:1673—1549(2007)01—0090-04 对Windows环境下堆溢出和栈溢出的研究 吉胜军,刘金碹 (西安科技大学计算机系,西安 710054) 摘 要:文章对Windows环境下堆溢出和栈溢出的不同之处进行了研究。基于 Windows的内存分 配机制,以堆和栈为切入点,通过实验对比分析得出了堆溢出和栈溢出的相似和不同之处,有助于程序 开发过程中编写出更加高效、安全的代码。 关键词:溢出;堆;栈 ;安全 中图分类号:TP393 文献标识码:A 缓冲区溢出是 Windows内存使用方面的一个弱点,它是通过向缓冲区写入过多的数据,超出了边 界,导致了数据的外溢;其覆盖了相邻的内存空间,利用它可以改写内存中的数据 、可以改变程序的流 程、干扰程序的正常运行,执行恶意代码。 1Windows的内存分配及堆和栈 在Windows程序执行时,内存都会被分为5个不同的数据段。如图1: 低地址 高地址 代码段Code l数据段Data IBss段 l堆Heap……--) --……栈Stack 图 1Windows内存分布 从图 1中可以看出:堆和栈可用空白区的大小将随程序的执行而变化,两者没有事先划好界限,运 行时向相向的方向增长。堆主要用来存放对象的,而栈主要是用来执行程序的。 堆 (heap)是用于存放程序运行中请求操作系统分配给 自己的内存段,它大小并不固定,可动态扩 张或缩减。由于从操作系统管理的内存分配,所以在分配和销毁时都要占用时间,因此用堆的效率非常 低。但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里 停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。当进程调用malloc等函数分配内存时, 新分配的内存就被动态添加到堆上 (堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中 被删除 (堆被缩减 )。 栈 (stack)是用户存放程序临时创建的局部变量。在调用函数时,参数。返回地址 ,EBP将被依 次压人堆栈。如果程序有局部变量,接下来就在堆栈中开辟相应的空间以存储变量。函数执行结束后, 这些局部变量的内容将被丢弃。在函数返回的时候,弹出 EBP,恢复堆栈到函数调用的地址,弹出返 回地址到 EIP以继续执行程序。由于栈的先进先出特点,所以栈特别方便用来保存,恢复调用现场。从 这个意义上将我们可以把堆栈看成一个临时数据寄存、交换的内存区。在 c++中,所有的函数调用都是 通过栈来进行的,所有的局部变量,形式参数都是从栈中分配内存空间的。 2栈溢 出和堆溢出 2.1栈溢出 向一个在栈上声明的缓冲区中复制数据,且复制的数据量比缓冲区大的时候,就出现缓冲区溢出。 收稿 日期 :2006.07.08 作者简介:吉胜军 (1978一),男,陕西韩城人,硕士研究生,主要从事网络安全方面的研究。 维普资讯 第2o卷 第1期 吉胜军等:对Windows环境下堆溢出和栈溢出的研究 9l 在栈上声明的各种变量的位置紧靠着函数调用程序的返回地址。出现错误原因是用户输人的数据未经验 证,就传递给sgcpy这样的函数,产生的后果就是调用函数的返回地址将被攻击者选择的某个地址覆盖, 执行其恶意代码。研究如下代

文档评论(0)

jsntrgzxy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档