我需要将Linux系统调用号码转换为人类可读的名称。在内核2.6.32中,我从/usr/include/asm/unistd_32.h中的__NR_ *宏中提取了这些名字,这很冒险,但它工作正常。现在我需要使它在内核3.2.0上工作,并且此文件不再存在。如何从系统调用号码获取Linux系统调用名称?
将Linux系统调用号码映射为人类可读名称的最简单和最便携的方式是什么?例如。 1->退出,6->关闭等。
我需要将Linux系统调用号码转换为人类可读的名称。在内核2.6.32中,我从/usr/include/asm/unistd_32.h中的__NR_ *宏中提取了这些名字,这很冒险,但它工作正常。现在我需要使它在内核3.2.0上工作,并且此文件不再存在。如何从系统调用号码获取Linux系统调用名称?
将Linux系统调用号码映射为人类可读名称的最简单和最便携的方式是什么?例如。 1->退出,6->关闭等。
文件<sys/syscall.h>
定义了很多SYS_
宏(间接通过我系统上的bits/syscall.h
)。例如:
#define SYS_eventfd __NR_eventfd
#define SYS_eventfd2 __NR_eventfd2
#define SYS_execve __NR_execve
#define SYS_exit __NR_exit
#define SYS_exit_group __NR_exit_group
#define SYS_faccessat __NR_faccessat
这是你在找什么?我不知道如果这是你的问题的一部分,但你可以这样做:
switch(code) {
#define syscode_case(x) case x: return #x;
syscode_case(SYS_eventfd);
syscode_case(SYS_eventf2);
}
你还需要知道什么是可用的宏,但你并不需要知道的实际值。
编辑:
我的来源是man 2 syscall
,其中规定:
#include <sys/syscall.h>` /* For SYS_xxx definitions
@GrzegorzJakacki这不是你正在寻找的?宏名称是可移植的。 –
谢谢。我知道我可以通过以下操作获取SYS _...宏的列表: 'echo“#include
grep -rA3 'SYSCALL_DEFINE.\?(<syscallname>,' *
(替代<syscallname>
与实际的系统调用)。man syscalls
并从那里开始寻找。
没有程序化的方式来做到这一点,我知道。只有内核源代码中的digginig。 [此文件包含系统调用号码](http://lxr.linux.no/linux+v3.2/arch/x86/include/asm/unistd_64.h) – Dabo