为什么执行基于堆的缓冲区溢出比基于堆栈的缓冲区溢出更困难?(关于x86体系结构)
我认为这可能是堆动态分配内存的事实。但还有比这个更重要的吗?
发布于 2016-02-09 21:59:45
它们共享相同的物理内存,但是堆栈帧包含返回地址。
返回地址将代码的地址存储在调用函数/过程/方法中,以便被调用的函数/过程/方法知道完成时返回到哪里。机械地,“返回”语句向处理器发出指令,从堆栈帧加载返回地址,然后卸载堆栈帧并跳转到加载的返回地址。(调用操作有效地进行了反向操作:捕获当前地址作为返回地址,并将其与新帧一起推到堆栈上。)
一个有问题的安全问题是劫持处理器程序计数器,它告诉它下一步将执行什么指令!
如果您在堆栈框架中覆盖返回地址,则可以将“返回”代码分支设置为您选择的位置,而不是它应该去的位置(返回到调用方)。
https://softwareengineering.stackexchange.com/questions/309710
复制相似问题