int 3 のブレークポイントがNOPに書き換えられてしまう

午後3時半起床,晴れ.朝食は薄切り食パン2枚のチーズトースト,コロッケ小1個.グーグルアカウントへのログインを二段階認証からスマホを使ったログインに切り替えたところ,マイクロソフトアカウントで起きていたのと同じ問題が発生するようになった.メールアカウントでログインできないという問題だ.この解決法はマイクロソフトの場合と同じく,「アプリケーションパスワード」というのを使うしかない.

「アプリケーションパスワード」を設定する画面が見つからない.カスペルスキーのアプリロックを解除したところ,この通知は出なくなった.ついでに,グーグル開発者チームアプリを「無効」に設定した.この操作で開発者チームアプリは一旦アンインストールされたが,そのあと「工場出荷時」の状態にリセットされた.また,Visual StudioのフォントをUI Meiryo11ポイントに切り替えた.

開発環境ではまだ,outlookのエラーが続いている.この不良を調整するためにはマイクロソフトアカウントを「Windows Hello」に対応させる必要があると言う.Windows Hello というのは「指紋または顔認証」を使ったサインインのことだ.すでにスマホにはMicrosoft Authenticator を導入済みなのだが…. Windows Hello を設定したが,outlookのエラーは止まらない.メールだけを同期させるようにしてとりあえず解消.

AIの上流系をダンプしてみた.

CARDLINK:#119 @121A I
     父:CARDLINK:#125 @149A L
         父:CARDLINK:#127 @159A M
         母:CARDLINK:#129 @715A N
     母:CARDLINK:#115 @80A G
         父:CARDLINK:#109 @19A D
             父:CARDLINK:#113 @77A F
     父:CARDLINK:#103 @1A A
         父:CARDLINK:#105 @2A B
             父:CARDLINK:#111 @20A E
             母:CARDLINK:#131 @822A O
             父:CARDLINK:#109 @19A D
                 父:CARDLINK:#113 @77A F
         母:CARDLINK:#107 @18A C
             父:CARDLINK:#111 @20A E
             母:CARDLINK:#131 @822A O

AIは基準ノードで父母を2組持っているが,どちらの系統にもAF は出てこない.つまり,AF系列でAIが優先ノードになるということはあり得ないと考えられる.どうもおかしい.AF系列のPrimaryには確かにAIが入っているが,それを設定している時点が見つからない.どうもブレークポイントの効き方が悪くなっているような気がする.

STOP文で使っている「int 3」というアセンブラーコードがNOPに書き換えられている.一度だけは停止するが,その時点でint 3の0xCCの代わりに0x90を書き込むような動作になっている.マイクロソフトも随分余計なことをしてくれたものだ.「新しく導入されたヘルパー」などと言っているが,ブレークするたびに余計なパネルを出すなどどれも余分なことばかりだ.使い辛くて仕方ない.

マイクロソフトが提供しているAssertionマクロに相当するものとして,我々は独自にASSERT_NEVER というマクロを使っている.どちらも関数の入り口付近に置き設定した条件によって停止するというものだが,使い勝手は断然ASSERT_NEVER の方が勝る.

主な相違点は①Assertionは条件式が偽の場合に停止するのに対し,ASSERT_NEVERは真の場合に停止する.この方が直観的だし,一時的/試験的に挿入していた検査文を恒久的なアサーションに書き換えるときもコードの修正が不要という利点がある.(ややこしい論理式の真偽を反転させる書き換えはリスクがある)②パネルを出さずにソースコード上で停止できる.このため障害の起きている正確な行番号を取得できる.(一行ずれているだけでも判断を誤る可能性がある)

③Assertionは例外処理を使って停止しているため継続実行ができず,アプリ終了してしまう.ASSERT_NEVERはSTOP文の割り込みINT 3で停止している.ASSERT_NEVERは継続実行することを予定していないが,STOP文自体はパネルを出さず,そのまま継続実行することができる.

現在STOP文はコメントアウトしている分を含めて1800箇所に埋め込まれている.ASSERT_NEVERの挿入箇所は2390もある.この仕組みはゼルコバの木が長い年月を掛けて培った「免疫系システム」そのものでありこれが効かなくなったら我々の「ピュアで超クリーンなシステム」は壊滅してしまう.

実際,仕掛りになっている15点という極小な反例サンプルでうろうろしているのも,このSTOP文が無効化されていたためだ.マイクロソフトがこの改変を「悪意」を持って実施したとは思わないが,我々にとっては致命的な改修になっている.「Assertionで代用できる」という意見もネット上には散見されるが,そうじゃないんだよ!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA