【G'zOne】W42CA by CASIO Part3【パンダ?ヲタ?】

このエントリーをはてなブックマークに追加
970969
なんで書式化文字列で誤動作するかということを少し説明しとく。
printf() の %n の例で言うと、これはそれまでに出力した文字数を変数に格納する。
ところが、実際にはそんなものを欲しくて %n を指定したわけではないのだから、
プログラム上では文字数を格納すべき変数が指定されていない。
C言語ってのはこのへんがとてもいい加減だから、指定されていない変数に
値を突っ込もうとすると、実際にどこに書き込むかはその時々の状況による。
具体的には、

1. アクセス権のないアドレスに触ってエラーが発生する
2. 別の変数の値を破壊して予想不能なバグを引き起こす
3. プログラムそのものを破壊して暴走する

このうちのどれが起こるか誰にもわからない。

実際に %n や %S がどういう動作をするのかは BREWディベロッパでないと分からないが、
バグの雰囲気からしてprintf()と同じような感じだろうと思う。
ほとんどの場合はリセットがかかるので、おそらくアクセスエラーをトラップしていて
比較的安全に強制リセットがかかっているんだと思う。
2や3だとデータを破壊する可能性があるのでかなり危険だ。
これもないとは言い切れないので安易に試すのはそれなりに覚悟してからにしよう。
これでもしデータが壊れても、auにキチガイみたいにクレームつけに行くんじゃないぞ。
知ってて試したのなら自己責任だ。

まあ、俺が書いたことがW42CAのバグとして事実かどうかは保証できんけどな。