node.jsでバイナリデータを実行するアドオン作った。
node.jsって、Google V8 JavaScript Engine使ってるから、
中身では、javascriptコードをJITで実行しているんだよね。
でも、node.jsでJITして実行したい!
って、要望が(僕の中で)高まってきたので、作りました。
nodeで、バイナリデータを模したArrayを引数にして、
モジュールを呼び出すとC++のアドオンでバイナリが実行され、
バイナリ実行結果の戻り値がリターンされます。
ただそれだけですが。。。
にわかなC++コードをあげときました。
https://github.com/yutaka-m/node-cfunc
実行イメージ
$ node > var a = require('./build/Release/cfunc'); undefined > a.cfunc(new Array(0xb8,0x05,0x00,0x00,0x00,0xc3)); 5
Arrayに以下のバイナリ列が入ってます。
戻り値が5で返るものです。
0xb8,0x05,0x00,0x00,0x00 // mov $0x5,%eax
0xc3 // retq
コンパイラ実装会用のネタとして、
関数定義の動的な変更(引数と戻り値)
外部ライブラリの読み込み(バイナリからのputchar呼び出し)
Brainf*ckの実装
をできればいいなぁ。