一个给它系统调用号和return它的名字的函数
a function that gives it system call number and return its name
在 c 或 c++ 中是否有我们将系统调用号作为参数并 returns 我们系统调用名称的函数?例如我们给它 60 然后它 returns 退出。对于 linux x86_64 系统
我不知道有任何标准库函数。这是很少有应用程序需要的功能。但是你可以从已经写过的人那里借 table,例如this table 来自 strace(1)
,当然假设您将遵守其版权许可。
您还可以从系统的 glibc 头文件创建一个查找 table,就像这样的 perl 单行代码:
perl -nE '
BEGIN { say "const char *syscallnames[] = {" }
if (/__NR_(\w+) (\d+)/) { say qq/\t[] = "",/ }
END { say "};" }' /usr/include/x86_64-linux-gnu/asm/unistd_64.h > syscallnames.h
asm/unistd_64.h
的确切位置可能因您的发行版和 glibc 版本而异。这是在 Ubuntu.
并将其与类似的东西一起使用:
#include <stdio.h>
const char * scnum_to_name(int num) {
#include "syscallnames.h"
return syscallnames[num];
}
int main(void) {
int num = 60;
printf("%d = %s\n", num, scnum_to_name(num));
return 0;
}
在 c 或 c++ 中是否有我们将系统调用号作为参数并 returns 我们系统调用名称的函数?例如我们给它 60 然后它 returns 退出。对于 linux x86_64 系统
我不知道有任何标准库函数。这是很少有应用程序需要的功能。但是你可以从已经写过的人那里借 table,例如this table 来自 strace(1)
,当然假设您将遵守其版权许可。
您还可以从系统的 glibc 头文件创建一个查找 table,就像这样的 perl 单行代码:
perl -nE '
BEGIN { say "const char *syscallnames[] = {" }
if (/__NR_(\w+) (\d+)/) { say qq/\t[] = "",/ }
END { say "};" }' /usr/include/x86_64-linux-gnu/asm/unistd_64.h > syscallnames.h
asm/unistd_64.h
的确切位置可能因您的发行版和 glibc 版本而异。这是在 Ubuntu.
并将其与类似的东西一起使用:
#include <stdio.h>
const char * scnum_to_name(int num) {
#include "syscallnames.h"
return syscallnames[num];
}
int main(void) {
int num = 60;
printf("%d = %s\n", num, scnum_to_name(num));
return 0;
}