數值的overflow/underflow - 仙境傳說

By Freda
at 2010-01-18T19:07
at 2010-01-18T19:07
Table of Contents
這個BUG主要是基於二補數系統中,數值發生overflow/underflow時
而程式撰寫者並沒有做妥善的檢查,所引發的數值BUG
下圖是以簡單的數值range : -32768~32767 為解釋
應用面令人爭議,所以我簡單介紹一下就好
--------------------------------------------
首先,我們先拿出一個簡單的模型,如下圖
(+) (-)
32767 <-> -32768
↖\ ↗/
\↘ /↙
0
我稍微解釋一下,基本上這個圖是一個循環
當32767+1時,其數值不是32768而是-32768
當-32768-1時,其數值不是-32769而是32767
而0為-32768與32767之中心點
在這邊我們只關心overflow/underflow,也就是32767+1與-32768-1
0這數值,實際上是一點意義都沒有的,儘管是暈眩率0%、失敗率0%...等
-------------------------------------------
講一個比較簡單的例子,假設普攻傷害最高只到32767
如果今天某玩家打到傷害高達65535,那怪物實際受到的傷害將會是下列算式
65535 / ( 32767 + 32768 ) = 1....0
怪物受到的傷害將會是0
如果今天某玩家打到傷害高達90000,那怪物實際受到的傷害將會是下列算式
90000 / ( 32767 + 32768 ) = 1....24465
怪物受到的傷害將會是24465
如果今天某玩家打到傷害高達10000,那怪物實際受到的傷害將會是下列算式
100000 / ( 32767 + 32768 ) = 1....34465
- ( 34465 - 32767 ) = -1698
怪物受到的傷害將會是-1698,所以我們預期會看到0或是MISS
--------------------------------------------
結論就是,如果只要我們找到感興趣的數值range,我們可以經由overflow/underflow
來達到一些實際上不可能達到的效果
如百萬HP、百萬SP、抗狀態100%、製作率100%、經驗值DOUBLE....等
這個BUG原理就簡單的介紹到這邊,應用面的細節就不明說了
--
而程式撰寫者並沒有做妥善的檢查,所引發的數值BUG
下圖是以簡單的數值range : -32768~32767 為解釋
應用面令人爭議,所以我簡單介紹一下就好
--------------------------------------------
首先,我們先拿出一個簡單的模型,如下圖
(+) (-)
32767 <-> -32768
↖\ ↗/
\↘ /↙
0
我稍微解釋一下,基本上這個圖是一個循環
當32767+1時,其數值不是32768而是-32768
當-32768-1時,其數值不是-32769而是32767
而0為-32768與32767之中心點
在這邊我們只關心overflow/underflow,也就是32767+1與-32768-1
0這數值,實際上是一點意義都沒有的,儘管是暈眩率0%、失敗率0%...等
-------------------------------------------
講一個比較簡單的例子,假設普攻傷害最高只到32767
如果今天某玩家打到傷害高達65535,那怪物實際受到的傷害將會是下列算式
65535 / ( 32767 + 32768 ) = 1....0
怪物受到的傷害將會是0
如果今天某玩家打到傷害高達90000,那怪物實際受到的傷害將會是下列算式
90000 / ( 32767 + 32768 ) = 1....24465
怪物受到的傷害將會是24465
如果今天某玩家打到傷害高達10000,那怪物實際受到的傷害將會是下列算式
100000 / ( 32767 + 32768 ) = 1....34465
- ( 34465 - 32767 ) = -1698
怪物受到的傷害將會是-1698,所以我們預期會看到0或是MISS
--------------------------------------------
結論就是,如果只要我們找到感興趣的數值range,我們可以經由overflow/underflow
來達到一些實際上不可能達到的效果
如百萬HP、百萬SP、抗狀態100%、製作率100%、經驗值DOUBLE....等
這個BUG原理就簡單的介紹到這邊,應用面的細節就不明說了
--
Tags:
仙境傳說
All Comments

By Victoria
at 2010-01-21T18:20
at 2010-01-21T18:20

By Carolina Franco
at 2010-01-22T10:34
at 2010-01-22T10:34

By Kama
at 2010-01-23T18:35
at 2010-01-23T18:35

By Jake
at 2010-01-27T00:23
at 2010-01-27T00:23

By Anonymous
at 2010-01-28T19:16
at 2010-01-28T19:16

By Ina
at 2010-02-01T22:45
at 2010-02-01T22:45

By Erin
at 2010-02-03T07:38
at 2010-02-03T07:38

By Kelly
at 2010-02-03T20:31
at 2010-02-03T20:31

By Blanche
at 2010-02-05T02:08
at 2010-02-05T02:08

By Jake
at 2010-02-06T07:47
at 2010-02-06T07:47

By Zanna
at 2010-02-09T18:40
at 2010-02-09T18:40

By Joseph
at 2010-02-10T15:27
at 2010-02-10T15:27

By Annie
at 2010-02-14T07:06
at 2010-02-14T07:06

By Regina
at 2010-02-15T03:05
at 2010-02-15T03:05

By Odelette
at 2010-02-18T11:56
at 2010-02-18T11:56

By Liam
at 2010-02-19T05:59
at 2010-02-19T05:59

By Catherine
at 2010-02-19T16:00
at 2010-02-19T16:00
Related Posts
關於獸人腐屍卡片

By Belly
at 2010-01-18T15:02
at 2010-01-18T15:02
怪物是如何追敵?

By Eden
at 2010-01-18T14:39
at 2010-01-18T14:39
英雄榮光包

By Audriana
at 2010-01-18T14:34
at 2010-01-18T14:34
還有客服人員這種東西存在嗎?

By Elizabeth
at 2010-01-18T14:22
at 2010-01-18T14:22
關於服事的技能

By Ivy
at 2010-01-18T13:43
at 2010-01-18T13:43