[BUG] 數值的overflow/underflow

看板RO作者時間14年前 (2010/01/18 19:07), 編輯推噓9(908)
留言17則, 10人參與, 最新討論串1/2 (看更多)
這個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原理就簡單的介紹到這邊,應用面的細節就不明說了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.191.166 ※ 編輯: bobo0120 來自: 114.32.191.166 (01/18 19:09)

01/18 19:10, , 1F
連這個都講...
01/18 19:10, 1F

01/18 19:14, , 2F
事實上玩家跟怪物攻擊傷害不在此種限制。
01/18 19:14, 2F

01/18 19:14, , 3F
比較明顯的例子應該是血量超過32767,組隊視窗內看到的
01/18 19:14, 3F

01/18 19:15, , 4F
血量會是負數,血條也變全黑,但實際上血還是滿的XD
01/18 19:15, 4F

01/18 19:15, , 5F
應用建議保留 別給有心人用~0~
01/18 19:15, 5F

01/18 19:29, , 6F
經驗值DOUBLE.......0__0
01/18 19:29, 6F

01/18 20:17, , 7F
超過數值記錄儲存格的range就有滿洩的狀況 16BIT遊戲很多
01/18 20:17, 7F

01/19 19:49, , 8F
這有甚麼不能講?程式設計或有修改遊戲的應該都知道吧XD
01/19 19:49, 8F

01/19 21:11, , 9F
是說應用面 不是說原理
01/19 21:11, 9F

01/19 21:12, , 10F
沒人希望在gvg看到四五個hp破80萬的刺客滿街跑吧
01/19 21:12, 10F

01/19 21:19, , 11F
樓上是說應用還是打比方 XDDDDDD
01/19 21:19, 11F

01/19 21:24, , 12F
百萬hp在內文就有提到了 怎麼弄出來才是問題
01/19 21:24, 12F

01/20 03:38, , 13F
告訴我吧= =+ 我也想變HP八十萬...
01/20 03:38, 13F

01/20 07:25, , 14F
想知道百萬HP+1 XD
01/20 07:25, 14F

01/20 12:47, , 15F
感謝大大們傾囊相授= =
01/20 12:47, 15F

01/21 09:26, , 16F
百萬血捨命 百萬魔阿修@@"
01/21 09:26, 16F

01/26 18:10, , 17F
其實我覺得應用面都教一教 一起倒一倒算了(誤)
01/26 18:10, 17F
[部份違規或廣告推文已被系統自動刪除]
文章代碼(AID): #1BL445i_ (RO)
文章代碼(AID): #1BL445i_ (RO)