Factory BLog: 今日あったとは限らないが出来事についてリンクを交えて語る雑記 powered by blosxom wiz MOEPA
RSS feed meter for http://www.g-fact.jp/fblog/blosxom.cgi 最新記事
記事一覧
前の 件へ 件中の - 件目を表示中次の 件へ

2004年10月25日

11月1日よりいくつかのパーツを販売停止します。(mingol.net mgo site)

…結局パッチは当てる気なしですか
 
ショップにパーツを置いただけで価格の表示内容がおかしくなり、しかもパーツ追加自体は正常に完了していること、新配布に伴って同数の旧パーツが販売停止になったこと、その相関関係に特筆すべき点が見当たらないことから考察するに、おそらくショップのデータは以下のような構造体になっているのではないだろうか。(フィールド名は適当、PS2のアーキテクチャは判らんのであくまでVisual C++相当)
unsigned char id; // ショップ内での識別ID
unsigned int partsid; // パーツの識別ID
unsigned long price; // 価格 (購入可能フラグを兼ねる)
で、これとは別に、価格>0である場合に、partsidをキーに商品名、商品種別ID(ソートに使用する)、アイコンを引っ張ってくるようなプログラムになっているのではないだろうか。
 
ショップ内での識別IDがunsigned char(0〜255)であることがミソである。
私は全種をまだ並べられていないので正確な数字はわからない(神、以上の段位である方、ご協力いただけたら幸いである)のだが、おそらく現在ショップに並んでいるパーツ数が255個か、それに近い値なのではないだろうか?
プログラムというのは冷淡なもので、メモリ上のデータエリアをここからここまで、と指定したところで、それが正確に行使されるかどうかはプログラム次第なのである(なので、プログラム中からプログラムを書き換えるという荒業も使えた。これを悪用したのがいわゆるバッファオーバーラン脆弱性)。
当然データエリア上においても同じことが発生するわけで、データの格納に必要なメモリ量を超えてしまって別な部分を上書きしてしまっても、それをプログラムで回避しない限りプログラムは破壊されたデータを正常なデータと認識して使うしかないのである。
川奈パッチの時、川奈を回ったときのラウンド結果に妙な値が表示されたことを覚えていらっしゃる方もおられるだろう。
要はあれと似たような状況になっているのである。
脱線した。おそらくショップにパーツを並べる機構というのは、パーツにショップ用の一意なIDを振り、そのパーツのパーツIDと価格を設定したデータをショップ用のデータエリアに追加することで新しく商品として認識されるようになっているものと思われる(新商品が並ぶ時にパッチがないことを考慮せよ)が、256個めを追加しようとしたためにunsigned charで確保された8ビットの領域(0〜255)を飛び越し、価格データを上書きしてしまったのだろう。
256は16進数で0x100、これをunsigned charに格納すると00の部分だけが格納されて、1は直前にある「価格」フィールドを上書きしてしまう。これにより、データエリアを初期化したデータとたまたま同じ値のパーツIDを持つパーツ(壁紙セット)が、異常な価格で表示されてしまう、という事態が発生したのではないか。
 
実際のプログラム内容がどうなっているかはわからないが、おそらく不具合内容としてはこんなもんか、これにかなり近いと思われる。

"mgo-parts-selling-stop-200411" Post: at 2004.10.25 15:48 to [/Factory BLog/mgo]
この記事のコメントとトラックバック(現在 0 件)
この記事のURL(MOEPAつき) ノーマルモード


前の 件へ 件中の - 件目を表示中次の 件へ
情報の取捨選択は自己責任でお願いいたします。

・主な情報元(Unicode順)
・ニュース系
BCNランキング
CNET Japan
excite News
Famitsu.com
impress Watch
Livedoor
Slashdot Japan
Wired Vision
Yahoo! Japan
・お気に入り
16連射のつぶやき
mochiめも
pya!
SWFBLOG
Time's ごはん
Wikipedia
うさだ
チャレンジ部
古今東西製品情報
舞軌内雑筆店
面白いサイトを見つけたよ。

直近2週間にコメントのあった記事
(別窓で開きます)

・Firefox/Mozillaユーザの方は、XHTML Ruby Supportをインストールされることをお勧めいたします。

・Factory BLog全般へのご意見・ご感想・苦情・ご要望・ネタのタレコミ等はこちらへ
半匿名メールフォーム
garagefactory@g-fact.jp [PGP KEY]
※ 個人が特定できない範囲内でネタにさせていただく場合があります。また、必ず対応が行われるとは限りません。予めご了承ください。

・こちらもどうぞ
Factory Log (携帯対応日記)
04年5月までの雑記
Garage Factory

RSS
・年月別の記事一覧:

2004年 (274)

6月 (67)
・7月 (38)
・8月 (29)
・9月 (37)
・10月 (36)
・11月 (32)
・12月 (35)

2005年 (756)

1月 (117)
・2月 (75)
・3月 (73)
・4月 (75)
・5月 (57)
・6月 (57)
・7月 (50)
・8月 (55)
・9月 (59)
・10月 (65)
・11月 (43)
・12月 (30)

2006年 (315)

1月 (52)
・2月 (52)
・3月 (38)
・4月 (18)
・5月 (12)
・6月 (15)
・7月 (20)
・8月 (23)
・9月 (24)
・10月 (23)
・11月 (29)
・12月 (9)

2007年 (172)

1月 (14)
・2月 (17)
・3月 (31)
・4月 (32)
・5月 (26)
・6月 (19)
・7月 (7)
・8月 (5)
・9月 (7)
・10月 (8)
・11月 (4)
・12月 (2)

2008年 (12)

2月 (7)
・4月 (2)
・6月 (2)
・8月 (1)

2009年 (2)

2月 (1)
・3月 (1)

2011年 (1)

2月 (1)
[00007193]