Pythonでの関数介入の使用open()
は、最初の数回の呼び出しの後は機能しないようです。Pythonが何らかの初期化を行っているか、何かが一時的に私の関数をバイパスしているのではないかと思います。
ここで、open
呼び出しは明らかにフックされています。
$ cat a
hi
$ LD_PRELOAD=./libinterpose_python.so cat a
sandbox_init()
open()
hi
ここでは、Pythonの初期化中に1回発生します。
$ LD_PRELOAD=./libinterpose_python.so python
sandbox_init()
Python 2.7.2 (default, Jun 12 2011, 20:20:34)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
open()
>>>
sandbox_fini()
ここではまったく発生せず、ファイルハンドルで書き込み権限が削除されたことを示すエラーはありません。
$ LD_PRELOAD=./libinterpose_python.so python3 -c 'b = open("a", "w"); b.write("hi\n"); b.flush()'
sandbox_init()
sandbox_fini()
コードはここにあります。でビルドしmake -f Makefile.interpose_python
ます。
完全な解決策はここにあります。