XbyakというJITアセンブラの仕組みについて???だったのだが、ソースを見ているうちになんとなく理解できた。
mov(eax,ptr[esp + 4]);
と書くと、実行時にmov()関数が呼ばれ、パラメータに応じた命令コードが、配列に格納される。
その配列の先頭番地を関数ポインタの開始アドレスとして引き渡し、実行するわけだ。
ポイントとしては、データ領域は通常実行権限が付与されていないので、配列領域はVirtualProtect APIを使用して実行権限を付与しておくところだろうか。
命令をアセンブラ風に記述できるところは、オペレータオーバーロードをうまく利用している。
こういうのをサクっと作れるってすごいなぁ。。。