2

Re-routing System Callsを参照して、既存のシステム コールの代わりに自分のシステム コールを使用する kext を作成しました 。

テスト中に、どのプロセスがこのシステムコールを呼び出しているのか疑問に思います。

指定されたプロセスを除いて、アプリケーションが正常に続行できるようにする必要があります。

呼び出しプロセスの情報を取得するものはありますか?

4

1 に答える 1

2

システム コールの通常の実装の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);
    }

の関数を使用して、pid を見つける<sys/proc.h>など、特定のプロセスに関する情報を取得できます。proc_pid

于 2013-04-10T08:41:45.517 に答える