4

在汇编语言编程中,是什么(如果有的话)阻止堆栈增长,直到它破坏数据或指令?

4

4 回答 4

5

只有通常由操作系统完成的 CPU/MMU 配置才能防止或拦截堆栈溢出和内存损坏或尝试在没有必要权限的情况下访问某些内容。

您可以阅读 Intel/AMD 的 x86 CPU 手册中有关内存管理的章节以了解更多信息。

于 2012-09-29T21:30:34.290 回答
4

您可以直接在接受的堆栈下限下方使用金丝雀,并不断检查金丝雀的值。

在内核代码(环 0)中,您还可以通过设置调试寄存器之一的值来设置硬件断点dr0, dr1,dr2dr3断点地址的线性地址,直接低于接受的堆栈下限,然后设置正确的标志位dr7寄存器,并报告或尝试修复断点处理程序代码中的情况。请参阅硬件断点权威指南

于 2012-09-29T22:46:59.987 回答
2

什么(如果有的话)阻止堆栈增长和破坏数据或指令?

你!在汇编中编码时绝对没有手牵手。您必须确保所有值都适合它们的缓冲区,所有指针索引都在界限内。您在堆栈上保留空间,确保任何适合该缓冲区的空间。在使用 Assembly 时,您负责编程的各个方面。

于 2012-09-29T21:41:29.397 回答
1

堆栈溢出的 99.99% 原因是程序错误或糟糕的程序设计。

现在我们有两个基本但不属于本主题的问题:

1)如何防止装配中的错误?

2)如何做好程序设计?

于 2012-09-29T22:04:26.240 回答