一般来说,更改底层系统以避免常见的安全问题是一个极好的想法,我们在本文后面也会遇到这个主题。事实证明存在许多可用的防御措施,而一些最受欢迎的措施可分组为以下类别:
锋派 基于探测方法(canary)的防御。这包括 StackGuard(由 Immunix 所使用)、ProPolice(由 OpenBSD 所使用)和 Microsoft 的 /GS 选项。
非执行的堆栈防御。这包括 Solar Designer 的 non-exec补丁(由 OpenWall 所使用)和 exec shield(由 Red Hat/Fedora 所使用)。
其他方法。这包括 libsafe(由 Mandrake 所使用)和堆栈分割方法。
遗憾的是,迄今所见的所有方法都具有弱点,因此它们不是万能药,但是它们会提供一早此些帮助。
CPU 执行除法指令唯肢时,是有可能溢出的。
特别是除数为零时,必然会出现:Divide overflow。
此外,当被除数的高位,大于等于除数时,也会发生“溢出”。
执行 DIV BH 指令后,商是存放在 AL 中,不能超出 8 位数。
但是,你的商是 1000H,超出了 8 位,这就指慎世一定会溢出。
所以,执行 DIV 指令之前,应该加以判断。
较孝羡好的方法是:编写一个“不会溢出”的除法程序。
方法思路如下:
在右图中,
被除数是:1A2B3C4DH,有 32 位数。
除数是:BL,仅有 8 位数。
商,是:32 位数。
按照图中的步骤,只要 BL 不为零,就绝对不会发生溢出。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)