- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中国科大 6.2 全局存储分配策略 利用活动记录进行的“黑客”行为 ——缓冲区溢出攻击 缓冲区溢出攻击 缓冲区溢出攻击: 缓冲区溢出攻击 缓冲区溢出攻击: 缓冲区溢出攻击 void bar(void) {printf(我是bar()函数,程序的执行流程改变了!\n);} void main(int argc, char *argv[]) { printf(foo() 函数的地址是 %p \n,foo); printf(bar()函数的地址是%p \n,bar); foo(argv[1]); getch(); } 缓冲区溢出攻击 缓冲区溢出攻击 缓冲区溢出攻击 缓冲区溢出攻击 foo() 函数的地址是bar()函数的地址是0040100A cc cc cc cc cc cc cc cc cc cc cc cc 80 ff 12 00 58 12 40 00 ae 0e 43 00 f8 eb fd 7f c0 1f 1234567891234567 @ 6.3 非局部名字的访问 本节介绍 过程内部如何访问过程外部声明的名字? 静态作用域 无过程嵌套的静态作用域(C语言) 有过程嵌套的静态作用域(Pascal语言) 动态作用域(Lisp语言) 6.3 非局部名字的访问 6.3.1 无过程嵌套的静态作用域 过程体中的非局部引用可以直接使用静态确定的地址 局部变量在栈顶的活动记录中,可以通过base_sp指针来访问 无须深入栈中取数据,无须访问链 过程可以作为参数来传递,也可以作为结果来返回 6.3 非局部名字的访问 6.3.2 有过程嵌套的静态作用域 过程嵌套深度 sort 1 readarray 2 exchange 2 quicksort 2 partition 3 变量的嵌套深度:它的声明所在过程的嵌套深度作为该名字的嵌套深度 6.3 非局部名字的访问 寻找非局部名字存储单元的访问链 6.3 非局部名字的访问 1、假定过程p的嵌套深度为np,它引用嵌套深度为na的变量a,na ? np。如何访问a的存储单元? 从栈顶的活动记录开始,追踪访问链np ? na次。 到达a的声明所在过程的活动记录。 访问链的追踪用间接操作就可完成。 6.3 非局部名字的访问 访问非局部名字的存储单元 6.3 非局部名字的访问 过程p对变量a访问时,a的地址由下面的二元组表示: (np ? na,a在活动记录中的偏移) 6.3 非局部名字的访问 2、建立访问链 假定嵌套深度为np的过程p调用嵌套深度为nx的过程x np nx的情况 x肯定就声明在p中 被调用过程的访问链必须指向调用过程的活动记录的访问链 6.3 非局部名字的访问 2、建立访问链 6.3 非局部名字的访问 2、建立访问链 假定嵌套深度为np的过程p调用嵌套深度为nx的过程x np ? nx的情况 sort 1 readarray 2 exchange 2 quicksort 2 partition 3 6.3 非局部名字的访问 2、建立访问链 假定嵌套深度为np的过程p调用嵌套深度为nx的过程x np ? nx的情况 p和x的嵌套深度分别为1,2,…,nx? 1的外围过程肯定相同 追踪访问链np ? (nx – 1)次,到达了静态包围x和p的且离它们最近的那个过程的最新活动记录 所到达的访问链就是x的活动记录中的访问链应该指向的那个访问链 6.3 非局部名字的访问 2、建立访问链 6.3 非局部名字的访问 6.3.3 动态作用域 被调用过程的非局部名字a和它在调用过程中引用的是同样的存储单元。 新的绑定仅为被调用过程的局部名字建立,这些名字在被调用过程的活动记录中占用存储单元。 6.3 非局部名字的访问 program dynamic(input, output); var r: real; procedure show; begin write(r: 5: 3) end; procedure small; var r: real; begin r := 0.125; show end; begin r := 0.25; show; small; writeln; show; small; writeln end. 6.3 非局部名字的访问 program dynamic(input, output); var r: real; procedure show; begin write(r: 5: 3)
您可能关注的文档
- 《经管系统简介.ppt
- 《经济学基础第1章.ppt
- 《经销商实战手册.ppt
- 《结合马克思理论评眼见为实.ppt
- 《结晶技术原理ppt.ppt
- 《结构力学基础简介.ppt
- 《经融学课件1.ppt
- 《结构动力计算1结构力学学习资料.ppt
- 《结构化设计概念和原理.ppt
- 《结构图的基本形式.ppt
- 农村信用联社(农商银行)招聘考试历年真题汇编及模拟试卷.docx
- 人教版八年级数学上册第十五章轴对称单元测试卷.docx
- 人教版七年级上册Unit 1 You and me周测试卷.docx
- 七年级上册道德与法治期末综合探究题专题训练试题卷.docx
- 中考二轮复习:中国近代史综合测试卷.docx
- 专题12 解放战争 中考历史一轮复习专项训练试题卷.docx
- 中考道德与法治专项练习(全国通用)专题二 加快构建新发展格局,着力推动高质量发展(热点专练)试题卷.docx
- 农商银行社会招聘考试模拟试卷(含解析).docx
- 专题17 国防建设与外交成就 中考历史一轮复习专项训练试题卷.docx
- 中考道德与法治考点专项突破专题十四 生态文明建设 试题卷.docx
原创力文档


文档评论(0)