python - 为什么 LD_PRELOAD 不能与 Python 一起使用?

标签 python c linux function-interposition interposing

在前几次调用后,使用 Python 的 open() 函数插入似乎不起作用。我怀疑 Python 正在进行某种初始化,或者某些东西暂时绕过了我的函数。

这里的 open 调用显然被 Hook 了:

$ cat a
hi
$ LD_PRELOAD=./libinterpose_python.so cat a
sandbox_init()
open()
hi

这里它在 Python 初始化期间发生一次:

$ 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()

codehere .使用 make -f Makefile.interpose_python 构建。

给出了完整的解决方案here .

最佳答案

有 open() 和 open64() 函数,您可能需要重新定义这两个函数。

关于python - 为什么 LD_PRELOAD 不能与 Python 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421784/

相关文章:

linux - 保持主目录与 Linux Box 同步

python - Django admin - OneToOneField 内联抛出 "has no ForeignKey"异常

C 程序产生两个进程树而不是一个

linux - Vim 复制一行并粘贴到多行

linux - 将 memcpy 用于 64 位 linux 将内容清零

c - 如何比较 nlink_t 和 int

python - python Tensorflow工作簿执行后取消分配内存

python - 如何在使用线程/多处理时使用简单的 sqlalchemy 调用

python - 使用python在Maya中创建bindSkin

c - 指向 NULL : a difference if malloc is used? 的指针赋值