最近

記事書くのが面倒になって書いてないですが、こんな感じのことをやってます。


①VMのテスト環境をつくってみる
XBYAKD言語移植
VMの命令を関数に分ける。2
VMの関数内をXBYAKJITコンパイルして実行する。2
VMの関数をほとんど全てJITコンパイルして実行できるようにする。2
JITコンパイラの完成。命令の保存と実行。でも、遅い。3
JITコンパイラ最適化①複数命令の連結 3
JITコンパイラ最適化②フラグの最適化。x86 CPUに近づける。 3a
JITコンパイラ最適化③プログラムカウンタは静的に解決する。4
ジャンプ命令を無くす。
case OF_O: lahf(); jo("o1"); and(ah, ~OF);jmp("o2");L("o1");or(ah,OF); L("o2");break;
case OF_O: pushf(); pop(eax); shr(ah,1);and(ah, OF); or(ah,al);break;
 部分的に関数コールを減らす。
JITコンパイラ最適化④各ブロック間のジャンプ時の関数呼び出しをジャンプ命令に換える。5
JITコンパイラ最適化⑤ネイティブなスタックを使う。6


⑫exe出力するぞ!①nasmでHello world
⑬exe出力するぞ!②nasmでインタラプタを作る。
⑭exe出力するぞ!③nasmインタラプタを出力してexeを作る。
⑮exe出力するぞ!④xbyakを使ってコンパイル


⑯自己書き換え対策①命令書き換え時はリコンパイラを呼び出すようにジャンプ命令を入れる。
⑰自己書き換え対策②スタックを使った場合の書き換え対策。(たぶん、32bitにしてフラグもたせる。普通スタックの中身みないだろうと)


とりあえず、⑪までできてます。
あとは、アセンブラをきっちり出力してランタイムの依存をなくし、
xbyakを使うことでアセンブラの依存も無くすと。
いうかんじで。


id:sumiiさんもついに穴ゴルに手を出してしまったとか。笑
俺はやらんぞ。時間もったいない。
と思いつつ、PEゴルフは参考になってるので微妙です。
でも、面白いよなぁ。