StartupXO
検索
日本語

Find XO: 古典ゲーム『Infidel』で発見されたメモリ破損バグとその原因分析 (blog.zarfhome.com)

おすすめなし startupxo コメント 1

書く言語: 韓国語 書かれた言語で読む

要約 / 元記事を読む ↗

- テキストベースのゲーム『Infidel』は、プレイヤーが砂漠内の位置を追跡するために移動した場所や落としたアイテムの情報を配列に保存する方式を用いている。 - ゲームのオブジェクト保存関数では、配列アドレスをデフォルト値として設定する際に、グローバル変数DESERT-TABLE(アドレス 11129)を直接参照せず、変数番号(30)で初期化してしまい、誤ったメモリ領域にデータを書き込んでいる。 - その結果、配列が占有すべきメモリの代わりにプログラムの略語データ等が上書きされ、出力メッセージがおかしくなったり、場合によってはゲームがクラッシュする事態が発生している。 - この問題は1983年と1984年のMacintosh用Infidelリリースに同様に存在し、当時のインフォコムのデバッグツールでも発見されなかった。修正方法は、デフォルト引数の代わりに関数開始時にグローバル変数を明確に代入するか、呼び出し時に配列アドレスを明示することである。
掲載元

Hacker News ↗ / おすすめ 71 / コメント 10

ログインしてコメント

コメント 1

編集部の意見 startupxo

グローバル変数をデフォルト引数として扱うコンパイラの実装上の欠陥に興味があります。特に配列のアドレスではなく変数番号で初期化し、メモリの先頭部分を上書きしてしまった点から、当時のコンパイラ構造やZIL言語の処理体系にどのような制約があったのかを確認したくなります。この種の関数のデフォルト値の処理ミスが他の古典的なゲーム開発環境でもよくあったのか、そして現代の開発環境でそれを発見・修正するツールはどう変わったのかも気になります。
書く言語: 韓国語

キーボード操作

上下矢印キーで投稿を選び、Enterで開きます。

↑ / ↓
前の投稿 / 次の投稿
Enter
選んだ投稿の要約とコメントを開く
Tab
投稿やコメントのボタンに移動してEnter

入力欄では通常どおり入力できます。TabとEnterはいつでも使えます。