Slide 20
Slide 20 text
Link-time コード生成
● 該当するメモリ範囲を1つ1つmprotectするバイナリをリンク時に生成
○ syscall命令を直で呼ぶバイナリ
● init_arrayにいれておく
○ Init_arrayとはshared objectのロード時に呼ばれる関数ポインタ群
○ C++のコンストラクタとかが入っている
memprotect_body_code_x86_64[] = {0x48, 0xbf, 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, 0x48, 0x8d,
0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xf7, 0x48, 0xc7, 0xc6, 0xcc,
0xbb, 0xaa, 0x00, 0x48, 0xc7, 0xc2, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x0a,
0x00, 0x00, 0x00, 0x0f, 0x05, 0x85, 0xc0, 0x74, 0x02, 0x0f, 0x0b};
SYS_mprotect(0xa)
リンク時に書き換えるアドレス
リンク時に書き換えるサイズ