あれっ?

・・・この関数がリターンしてきた後、pop ebxでスタック戻しているけど・・・戻しすぎじゃん!?

そこでオレは気付いた。

これパスカル型関数じゃねーか・・・

パスカル型関数はスタック戻しはいらない。

・・・オレはWindowsの関数がたいていC++の関数であり、さらに、C++の関数がパスカル型だということを知らなかったのだった・・・
(もちろんソースの拡張子には.cppではなく.cを付けていたのであった・・・)

そこで問題の関数にPASCALを付けて解決。不審な動作は一切消えてなくなったのであった・・・(.cppにする、という手もあるが・・・)

これはもちろん、オレが間抜けだと言えば間抜けなのだが、オレにアセンブラの知識がなければ、こんなに早く解答にはたどりつかなかっただろう。

コンピュータシステムは今や大変複雑である。
バグはどこにでもひそんでおり、OSになのか、コンパイラになのか、ライブラリになのか、自分のコーディングになのか、予想は全くつかない。

ドライバがおかしいのか?いや、まてよ、このコンパイラ、以前のバージョン、バグあったよな・・・また同じようなバグか?

などと考えてみてもそう簡単に結果なんて出るはずはない。特に本人のコーディングの場合、間違えた本人が考えてるんだから・・・

結局最終的に間違いないのはアセンブラレベルのデバッグ。まあ、と言っても、いわゆる謎バグ、ハングとか、システムに近そうなバグの場合だけかもしれないけどね・・・

そうそう、あと、コンパイラのアセンブリ出力でバグ取りや新発見することも多いよね?オレはあれがないと死。