[英]How to obtain Linux syscall name from the syscall number?
我需要將 Linux 系統調用號轉換為人類可讀的名稱。 使用內核 2.6.32,我從/usr/include/asm/unistd_32.h 中的_ NR * 宏中提取名稱,這很笨拙,但有效。 現在我需要讓它在內核 3.2.0 上工作並且這個文件不再存在。
將 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.