我正在阅读代码完成2,并且在错误处理中遇到了以下语句:
后来它说:
但是我不能真正理解上面的陈述。缓冲区溢出如何导致地址受损?
最佳答案
这是因为错误处理功能的地址存储在应用程序可访问的内存区域中,具体取决于您的平台,就像32位或64位整数一样。它通常位于堆栈底部的某个位置,但是如果使用全局错误处理程序,则只要线程知道如何到达该位置,它就可以位于其他位置。
在缓冲区溢出的情况下,如果该内存被其他函数的地址覆盖,则当应用程序中发生错误时,将调用新函数,而不是预期的错误处理函数。
请注意,所有细节均取决于程序所使用的框架或操作系统。本教程为Windows提供了一个很好的示例:
http://www.primalsecurity.net/0x3-exploit-tutorial-buffer-overflow-seh-bypass/
也就是说,缓冲区溢出可能会使错误处理程序不安全而不替换其地址。经典示例是使用文本错误编辑器的示例,该编辑器在全局错误导致进程崩溃之前使用全局错误处理程序将文档保存到文件中。知道程序的攻击者可能会使用缓冲区溢出将文件流句柄替换为他们控制的其他资源(例如网络套接字)并截取输出。
关于c - 缓冲区溢出和集中式错误处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25355801/