首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于堆栈的和基于堆的溢出

基于堆栈的和基于堆的溢出
EN

Software Engineering用户
提问于 2016-02-09 20:55:56
回答 1查看 1.6K关注 0票数 -3

为什么执行基于堆的缓冲区溢出比基于堆栈的缓冲区溢出更困难?(关于x86体系结构)

我认为这可能是堆动态分配内存的事实。但还有比这个更重要的吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2016-02-09 21:59:45

它们共享相同的物理内存,但是堆栈帧包含返回地址。

返回地址将代码的地址存储在调用函数/过程/方法中,以便被调用的函数/过程/方法知道完成时返回到哪里。机械地,“返回”语句向处理器发出指令,从堆栈帧加载返回地址,然后卸载堆栈帧并跳转到加载的返回地址。(调用操作有效地进行了反向操作:捕获当前地址作为返回地址,并将其与新帧一起推到堆栈上。)

一个有问题的安全问题是劫持处理器程序计数器,它告诉它下一步将执行什么指令!

如果您在堆栈框架中覆盖返回地址,则可以将“返回”代码分支设置为您选择的位置,而不是它应该去的位置(返回到调用方)。

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/309710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档