【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

VBAでJITからコールバック

VBAJITから文字出力するため、Debug.Printのラッパーを定義してコールバックさせてみました。ラッパーのアドレスを引数で渡しています。

簡単に見えますが、結構ハマりました。

  • pushでespがずれたのを忘れて[esp+8]で引数を取ろうとした。
  • PutCharの引数にByValを付け忘れた。ポインタ渡しと認識されるため、[65]にアクセスしようとして落ちた。

Brainf*ckをJITで動かすのに使えないかと思い実験してみました。