我需要將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