写程序,溢出是啥意思?

写程序,溢出是啥意思?,第1张

溢出是程序设计者陆基迅设计时的不足所带来的错误。

一般来说,更改底层系统以避免常见的安全问题是一个极好的想法,我们在本文后面也会遇到这个主题。事实证明存在许多可用的防御措施,而一些最受欢迎的措施可分组为以下类别:

 锋派 基于探测方法(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 不为零,就绝对不会发生溢出。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12319029.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存