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

JIT

なぜか無性にJITがやりたくなりました。原理としてはヒープに確保したメモリにコードを出力してcallするというものです。

Windows XP SP2からはNXビットが有効になったため、NXビットに対応したCPUではヒープに生成したコードを実行できません。しかしVirtualAlloc()で明示的にPAGE_EXECUTEを指定すれば対応できます。

実行時にラッパーを作れば、引数を埋め込んでカリー化のようなことも可能です。その手法でthisを埋め込んだコールバックはサンクと呼ばれていて、ATLのメッセージ処理で使われています。