JITとメモリ保護

きちんとセグメントに対して書き込みフラグと実行フラグを指定しているOSにおいては、VMJITという手段は取れないことにやっと気づく。
具体的には、広義の自己書き換えを容認するとセキュリティホールの可能性が発生し、これを回避するために、

  • Texyなどの実行フラグの立っているセグメントは書き込み不可
  • Heap,Stackなどの書き込みフラグの立っているセグメントは実行不可

としないと、安全性は担保できないんですね。
あ、いや、IA32はそんなに細かい制御できないっぽいので(ほんとかなぁ?たしかにIA32上のWindowsLinuxもこの手の制御してないけど……)、現在流通しているアーキティクチャの大半は影響ないんですが。
古典的なOSとしての保護機能はバイトコードVM(正確には、動的ネイティブコンパイル)には逆風なんだなぁ。
まぁ、セキュリティを上げようとすると利便性が落ちるのは、当然といえば当然なんですけど……。