簡體   English   中英

如何從系統調用號中獲取 Linux 系統調用名稱?

[英]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
  1. 您可以在內核源目錄中執行grep -rA3 'SYSCALL_DEFINE.\\?(<syscallname>,' * (用實際的系統調用替換<syscallname> )。
  2. 您可以管理man syscalls並從那里開始查找。
  3. 檢查這里並耐心等待(評論中報告的鏈接已損壞)
  4. 這個似乎有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM