【发布时间】:2023-03-13 05:23:01
【问题描述】:
这与问题'Why do stacks typically grow downwards?' 有关,但更多是从安全角度来看。我一般指的是x86。
当缓冲区通常在内存中向上写入时,堆栈会向下增长,这让我感到奇怪。例如,一个典型的 C++ 字符串的结尾比开头的内存地址更高。
这意味着如果存在缓冲区溢出,您将进一步覆盖调用堆栈,我理解这是一个安全风险,因为它打开了更改返回地址和局部变量内容的可能性。
如果堆栈在内存中向上增长,缓冲区溢出不会简单地运行到死内存中吗?这会提高安全性吗?如果是这样,为什么没有完成?那么 x64 呢,这些堆栈会向上增长吗?如果不是,为什么不呢?
【问题讨论】:
-
不确定它是否对防止堆栈缓冲区溢出问题有很大帮助。好吧,可能更多是在小端架构上。
-
您假设内存是连续映射的。没有什么可以阻止您在堆栈底部的内存映射中出现一个漏洞,以使缓冲区溢出运行到死内存中,但是您将堆栈限制在放置其基数的任何位置。此外,没有什么会迫使您将向上增长的堆栈放在内存空间末端附近。
标签: security architecture x86 stack cpu