- DOOMエンジンの変数オーバーフローによってゲームクラッシュが発生することを確認
- 実使用環境で2.5年間DOOMを実行する実験を実施
- 変数の値が増え続け、オーバーフローに達した時点で予想どおりゲームが終了
- 実験はPDAとDIY UPSを用いた長期自動実行環境で実施
- このテストは理論上の問題が現実でも実際に発生することを実証
実験の背景と動機
- 約2年半前、DOOMエンジンの構造と動作方式に関する記事を読んだ際、デモ実行の追跡に使われる変数がデモ開始のたびに増え続けることを発見
- この変数は直前の値と比較されるが、繰り返し値が大きくなることで、最終的にオーバーフローの危険を内包していた
- 通常の使用環境ではこのオーバーフローに到達しにくいが、実際にどれほど時間がかかるのかを確かめるため、直接実験することを決定
実験方法と過程
- 単純計算により、オーバーフローが発生するまでに約2年半のランタイムが必要だと推定
- 実際に確認するため、PDA端末にDOOMをインストールし、18650バッテリーを使ったDIY UPSで電源を供給
- その端末をルーターのUSBポートに接続し、5V電源を継続的に供給
- システムを自動充電環境で継続稼働するよう設定し、大半の時間は放置
クラッシュ発生と結果
- 実験開始から約2年半が経過した後、端末の画面にポップアップ通知が表示されたことを確認
- DOOMは予想どおり、オーバーフローによるハードクラッシュ状態に移行
- 実験の結果、変数オーバーフローによるゲーム終了現象が、実機および実際のソフトウェア環境でも発生することを実証
結論と示唆
- プログラミングにおいて、長時間にわたって累積的に増加する変数への注意が重要であることを強調
- 理論上の可能性にすぎないと思われていたオーバーフロー問題が現実で実際に起こりうることを実験的に確認
- レガシーコードや長時間動作するソフトウェアに潜む隠れた欠陥への警戒を促す
まだコメントはありません。