gpt4 book ai didi

hardware - 可以使用哪些硬件或软件解决方案来防止堆栈溢出?

转载 作者:行者123 更新时间:2023-12-03 06:41:42 25 4
gpt4 key购买 nike

防止堆栈溢出的硬件解决方案是什么?例如,当我们要设计一个新的操作系统时,如何防止堆栈溢出?

谢谢

最佳答案

如果可以静态确认代码不具有任何直接或间接递归,则静态分析可以得出最坏情况的堆栈使用情况。确保堆栈足够大并且不会出现堆栈溢出。最大的困难是可能很难确定哪些函数可以被哪些函数指针调用。例如,如果一个函数指针可以指向 foo1() 或 foo2(),另一个函数指针可以指向 bar1() 或 bar2(),并且 foo1() 调用第二个函数指针(从而到达 bar1 或 bar2),则不会有递归的可能性,但如果编译器无法确定第二个指针只能指向 bar1() 或 bar2() 它可能不知道这一点。

如果可以确定应用程序是非递归的,并且静态分析最坏情况调用图并不比实际发生的情况差太多,则可以完全避免堆栈并分配所有变量都是静态的。在某些情况下(特别是在没有高效索引的架构上),与使用堆栈相比,这种方法可能会显着提高性能。

从安全角度来看,避免堆栈/缓冲区溢出漏洞的一个好方法是避免将真实的程序计数器地址存储在“普通”指针可以访问的任何地方。将程序计数器堆栈与参数/自动变量堆栈完全分开存储,并且不直接存储任何函数指针。相反,让每个“函数指针”成为具有相同签名的函数表的索引,并在使用索引之前检查索引以确保其在范围内;如果两组或多组函数具有不同的安全含义,并且应该由完全不同的指针调用,请根据需要调整一组的签名以使其与另一组不同(因此不能调用第一组中的函数)转换为对第二个函数的调用)。

关于hardware - 可以使用哪些硬件或软件解决方案来防止堆栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com