- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
缓冲区溢出原理 第四章 栈溢出利用 缓冲区溢出:就是在大缓冲区中的数据向小缓冲区复制的过程中,由于没有注意小缓冲区的边界,“撑爆”了较小的缓冲区,从而冲掉了和小缓冲区相邻内存区域的其他数据而引起的内存问题。缓冲溢出是最常见的内存错误之一,也是攻击者入侵系统时所用到的最强大、最经典的一类漏洞利用方式。 成功地利用缓冲区溢出漏洞可以修改内存中变量的值,甚至可以劫持进程,执行恶意代码,最终获得主机的控制权。要透彻地理解这种攻击方式,需要计算机体系架构方面的基础知识,理解CPU、寄存器、内存是怎样协同工作而让程序流畅执行的。 系统栈的工作原理 内存的不同用途 根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行。但是不管什么样的操作系统、什么样的计算机架构,进程使用的内存都可以按照功能大致分成以下4 个部分。 (1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。 (2)数据区:用于存储全局变量等。 (3)堆 区:进程可以在堆区动态地请求一定大小的内存,并在用完之后归还给堆区。动态分配和回收是堆区的特点。 (4)栈 区:用于动态地存储函数之间的调用关系,以保证被调用函数在返回时恢复到调用函数中继续执行。 在Windows平台下,高级语言写出的程序经过编译链接,最终会变成第2章介绍过的PE文件。当PE文件被装载运行后,就成了所谓的进程。 PE文件代码段中包含的二进制级别的机器代码会被装入内存的代码区,处理器将到内存的这个区域一条一条地取出指令和操作数,并送入算术逻辑单元进行运算;如果代码中请求开辟动态内存,则会在内存的堆区分配一块大小合适的区域返回给代码区的代码使用;当函数调用发生时,函数的调用关系等信息会动态地保存在内存的栈区,以供处理器在执行完被调用函数的代码时,返回母函数。这个协作过程如下图所示。 栈与系统栈 系统栈 系统栈由系统自动维护,它用于实现高级语言中函数的调用。对于类似C语言这样的高级语言,系统栈的PUSH、POP等堆栈平衡细节是透明的。一般说来,只有在使用汇编语言开发程序的时候,才需要和它直接打交道。 系统栈在其他文献中可能曾被叫做运行栈、调用栈等。 函数调用时发生了什么 寄存器与函数栈帧 每一个函数独占自己的栈帧空间。当前正在运行的函数的栈帧总是在栈顶。Win32系统提供两个特殊的寄存器用于标识位于系统栈顶端的栈帧。 (1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。 (2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。 注意:EBP指向当前位于系统栈最上边一个栈帧的底部,而不是系统栈的底部。严格说来,“栈帧底部”和“栈底”是不同的概念,也就是,每个函数都有自己独立的EBP和ESP;所以,每个函数运行时都要将EBP和ESP的值切换成自己的值。 寄存器与函数栈帧 函数栈帧:ESP和EBP之间的内存空间为当前栈帧,EBP标识了当前栈帧的底部,ESP标识了当前栈帧的顶部。在函数栈帧中,一般包含以下几类重要信息。 (1)局部变量:为函数局部变量开辟的内存空间。 (2)栈帧状态值:保存前栈帧的顶部和底部(实际上只保存前栈帧的底部,前栈帧的顶部可以通过堆栈平衡计算得到),用于在本帧被弹出后恢复出上一个栈帧。 (3)函数返回地址:保存当前函数调用前的“断点”信息,也就是函数调用前的指令位置,以便在函数返回时能够恢复到函数被调用前的代码区中继续执行指令。 函数调用大致包括以下几个步骤。 (1)参数入栈:将参数从右向左依次压入系统栈中。 (2)返回地址入栈:将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行。 (3)代码区跳转:处理器从当前代码区跳转到被调用函数的入口处。 (4)栈帧调整:具体包括。 保存当前栈帧状态值,已备后面恢复本栈帧时使用(EBP入栈)。 将当前栈帧切换到新栈帧(将ESP值装入EBP,更新栈帧底部)。 给新栈帧分配空间(把ESP减去所需空间的大小,抬高栈顶)。 Big Endian和Little Endian的区别 谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是little endian呢? 其实big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效
您可能关注的文档
- 【步步高】2014高考物理大一轮 第九章 47 电磁感应中的动力学与能量问题 选修3-2.doc
- 【创新设计】2013-2014学年高中物理鲁科版选修1-1第5章5-1家电的技术参数.ppt
- 【创新设计】2013-2014学年高中物理鲁科版选修3-1第4章4-2多用电表的原理和使用.ppt
- 【创新设计】2013-2014学年高中物理鲁科版选修3-1第5章5-(3+4)磁感应强度、磁通量 磁和现代科技.ppt
- 【创新设计】2014届高考历史三轮考前体系全通关 高考题型特色专练 题型八 比较型选择题.doc
- 【创新设计】2015高考地理(浙江专用)大二轮总复习精选:高考倒计时13天.ppt
- 【创新设计】(福建专用)2014届高考地理一轮复习 第一部分.ppt
- 【地理】鲁教版必修3 第三单元 第一节 区域水土流失及治理——以黄土高原为例 (课件).ppt
- 【地理】鲁教版必修3 第三单元 第一节 区域水土流失及治理—以黄土高原为例(课件1).ppt
- 【电气技术考试题及其答案汇总.doc
文档评论(0)