新しい高性能で汎用的なシステムコールフックの仕組みを作ってみました。 モチベーションとして、システムコールをフックしてユーザー空間でエミュレートしたくなったのですが、現状、性能と汎用性を両立する仕組みがなさそうだったので、新しい方法を考えました。 今回のシステムコールフックの仕組みは以下のような特徴があります。 ptrace より 100 倍以上高速 LD_PRELOAD や既存のバイナリ書き換えツールより確実 カーネルへの変更なし、かつカーネルモジュールを使わない プログラムのソースコード、プログラムの再コンパイル不要 eBPF でトレーシングをしているけれど、できれば制約が少ないユーザー空間でトレーシングツールを作りたい。もしくは、gVisor のようなサンドボックスを作りたいけれど、ptrace による性能劣化が大きいので、他の高速なシステムコールフックの仕組みが使いたい、というよう
![ptrace より 100 倍速いシステムコールフック作った - かーねるさんとか](https://cdn-ak-scissors.b.st-hatena.com/image/square/e55614f8fc8e376f70c9a3eb03875305a116d955/height=288;version=1;width=512/https%3A%2F%2Fraw.githubusercontent.com%2Fyasukata%2Fzpoline%2Fmaster%2FDocumentation%2Fimg%2Fzpoline.png)