我有两个想法。
-“真正的方式”。
我想你想要
ptrace
本质上,此调用用于编写调试器。注意
PTRACE_SYSCALL
ptrace
调用以查看进程的内存,以观察它是否是调用
open()
.
-懒散、刻板的方式。
你可以使用
LD_PRELOAD
开()
,
dlopen()
预载
此共享库中的环境变量,因此动态链接器将在进程启动时加载它。
这种方法的一个缺点是,如果一个进程知道它正在以这种方式被观察,它可以重置环境变量并再次执行自身,从而逃避检测。我能想到的另一个问题是,作为一个安全特性,如果您是root用户,那么这个环境变量是不受尊重的。