Linux kernel 如何获取当前有效的系统调用?

Linux kernel 如何获取当前有效的系统调用?,linux-kernel,Linux Kernel,我是linux内核编码的新手,所以现在我正在编写函数,我需要知道哪个系统调用正在工作,根据哪个系统调用正在执行来构建函数?那么,是否存在携带当前正在执行的系统调用号(NR)的变量或结构?“是否存在携带当前正在执行的系统调用号(NR)的变量或结构?”-当然,没有这样的变量。但是,您可以尝试从调用堆栈中提取第一个函数:如果进程执行syscall,则第一个函数将是syscall函数。知道syscall函数的地址后,可以尝试使用一些表将其转换为系统调用号。请注意,并非Linux内核中的每个线程都从系统调

我是linux内核编码的新手,所以现在我正在编写函数,我需要知道哪个系统调用正在工作,根据哪个系统调用正在执行来构建函数?那么,是否存在携带当前正在执行的系统调用号(NR)的变量或结构?

“是否存在携带当前正在执行的系统调用号(NR)的变量或结构?”-当然,没有这样的变量。但是,您可以尝试从调用堆栈中提取第一个函数:如果进程执行syscall,则第一个函数将是syscall函数。知道syscall函数的地址后,可以尝试使用一些表将其转换为系统调用号。请注意,并非Linux内核中的每个线程都从系统调用开始。这意味着如果我确定此函数由某个系统调用调用,那么如果我可以提取堆栈,那么第一个函数必须是syscall函数吗?有没有一种方法可以得到堆栈,或者得到堆栈中的第一个函数@tsyvarev您可以使用
save\u stack\u trace
获取函数的返回地址数组。在较新的内核中,函数
save\u stack\u trace
被替换为
stack\u trace\u save
。例如,见问题:。