Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 获取调用系统调用的进程pid的方法?_Macos_Kernel_Kernel Extension - Fatal编程技术网

Macos 获取调用系统调用的进程pid的方法?

Macos 获取调用系统调用的进程pid的方法?,macos,kernel,kernel-extension,Macos,Kernel,Kernel Extension,我创建了一个kext来使用我的系统调用,而不是引用的现有系统调用 . 在测试期间,我想知道哪个进程调用这个systemcall 我需要允许应用程序正常继续,指定的进程除外 是否有任何东西可以获取调用进程的信息?如果查看调用进程的源代码,您可以看到它与表示作为第一个参数传入的调用进程的struct proc一起工作: int ptrace(struct proc *p, struct ptrace_args *uap, int32_t *retval) { // … if

我创建了一个kext来使用我的系统调用,而不是引用的现有系统调用 .

在测试期间,我想知道哪个进程调用这个systemcall

我需要允许应用程序正常继续,指定的进程除外


是否有任何东西可以获取调用进程的信息?

如果查看调用进程的源代码,您可以看到它与表示作为第一个参数传入的调用进程的
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);
    }

您可以使用
中的函数来获取给定进程的信息,例如
proc\u pid
来查找pid。

在这种情况下,您可能只需调用。实际上,您是对的。理论上,如果函数是直接调用的,而不是用户进程的系统调用的结果,调用方可能会通过参数传递不同的进程。