<< 15/19 >>
First Last

nacl_dyncode_create

ブラウザ上で JIT して実行する場合、生成されたコードも当然 verification をしてもらわないといけない

nacl_dyncode_create という API で生成したコードを verifier にかけた後で実行属性をつけてもらう

コード生成部分を書きかえて、 NaCl verifier が怒らない安全なバイナリを生成する必要がある
基本そこらじゅうに nop を入れまくるだけだけど、 TCC のコード生成部分はたいへん男らしいので割とめんどくさい

            gp(9);  // これらをまとめて padding しないとダメ
            g(0x0f);  // とりあえず 0x0f を emit
            t = psym(0x85 ^ inv, t);  // 残りはこっち

psym 内で padding するだけでできればラクなんですけどね

https://github.com/shinh/nacltcc/commit/6b788b18b22e7d534c3eeef4c2938e8ec07a8542