我在阅读关于漏洞利用的工作方式,似乎很多漏洞都是通过覆盖堆栈中的返回地址来操作的。为了使这变得更加困难(堆栈金丝雀,ASLR,DEP等)已经付出了很多努力,但在我看来,硬件制造商添加寄存器会更容易,只能通过调用和ret指令访问,那将保存返回地址。这样,根据定义,返回地址不会被缓冲区溢出覆盖。因为call和ret仍然存在,并且仍然像当今的CPU一样运行(唯一的区别是它们存储返回地址的地方),所以在我看来,兼容性问题不会太多。由于您使用的是寄存器而不是RAM来访问地址,因此性能影响可能是正面的(尽管无关紧要)。使用单独的寄存器来存储返回地址?
英特尔显然有空间分配更多的寄存器,为安全起见,因为MPX正在尽管需要两个额外的寄存器来实现。那么他们为什么不添加一个专门的寄存器来存储返回地址呢?
这不是一个完全不合理的想法,我已经知道了它的地方(不幸的是我不记得在哪里)。房间里的大象是我们需要一个堆栈结构来允许任意嵌套的函数调用。一个单独的调用/ ret堆栈(这是我之前提到的想法)似乎更强大。兼容性问题是不可避免的,有些工具依赖于函数调用期间堆栈的填充情况,但我相信我们可以负担(又一个)过渡期。 –
那么你会如何解决嵌套调用? (除了将值存储到内存中,然后可以通过代码以任何方式操作) – Ped7g
具有片上返回地址的性能优势可以通过[返回地址缓存](https://priorart.ip。)来实现。 com/IPCOM/000108056)来预测RET指令的结果。 –