我做了一个 kext 来使用我的系统调用,而不是参考Re-routing System Calls的现有系统 调用。
在测试期间,我想知道哪个进程调用了这个系统调用。
我需要允许应用程序正常继续,除了指定的进程。
有什么东西可以获取调用进程的信息吗?
我做了一个 kext 来使用我的系统调用,而不是参考Re-routing System Calls的现有系统 调用。
在测试期间,我想知道哪个进程调用了这个系统调用。
我需要允许应用程序正常继续,除了指定的进程。
有什么东西可以获取调用进程的信息吗?
如果您查看系统调用的常规实现ptrace
的源代码,您会发现它与struct proc
作为第一个参数传入的表示调用进程一起使用:
int
ptrace(struct proc *p, struct ptrace_args *uap, int32_t *retval)
{
// …
if (uap->req == PT_DENY_ATTACH) {
proc_lock(p);
if (ISSET(p->p_lflag, P_LTRACED)) {
proc_unlock(p);
KERNEL_DEBUG_CONSTANT(BSDDBG_CODE(DBG_BSD_PROC, BSD_PROC_FRCEXIT) | DBG_FUNC_NONE,
p->p_pid, W_EXITCODE(ENOTSUP, 0), 4, 0, 0);
exit1(p, W_EXITCODE(ENOTSUP, 0), retval);
/* drop funnel before we return */
thread_exception_return();
/* NOTREACHED */
}
SET(p->p_lflag, P_LNOATTACH);
proc_unlock(p);
return(0);
}
您可以使用 中的函数<sys/proc.h>
来获取有关给定进程的信息,例如proc_pid
查找 pid。