#include <sys/ptrace.h>
long ptrace(
enum __ptrace_request request,
pid_t pid,
void *addr,
void *data
);
描述
ptrace()
使得一个进程(tracer)能够观察、控制另一个进程(tracee)的执行,以及检测、改变tracee的内存、寄存器。
一个tracee首先需要被attach到一个tracer,Attachment
and subsequent commands are per thread: in a multithreaded
process, every thread can be individually attached to a
(potentially different) tracer, or left not attached and thus not
debugged. Therefore, “tracee” always means “(one) thread”, never
“a (possibly multithreaded) process”. Ptrace commands are always
sent to a specific tracee using a call of the form
ptrace(PTRACE_foo, pid, ...)
where pid is the thread ID of the corresponding Linux thread.
(Note that in this page, a “multithreaded process” means a thread
group consisting of threads created using the clone(2)
CLONE_THREAD flag.)
如果一个进程要发起一次跟踪,有两种方式:
fork()
一个子进程,然后让子进程调用ptrace(PTRACE_TRACEME, ...)
,这通常会和execve(2)
结合使用,在execve()
中调用我们实际要追踪的.- 使用
PTRACE_ATTACH
或者PTRACE_SEIZE
。
当被跟踪时,tracee每发送一个信号就会停下,即使信号被忽略了(一个例外是SIGKILL
,它和平常一样)。tracer在下一次调用waitpid(2)
(或者是其他wait系列函数)时会被通知,该次调用会返回状态码以指示tracee停下的原因。当tracee停下的时候,tracer可以使用多种ptrace请求来观察、修改tracee。然后,tracer会让tracee继续运行,optionally ignoring the delivered signal (or even delivering a different signal instead).
If the PTRACE_O_TRACEEXEC
option is not in effect,则被跟踪进程对 execve(2) 的所有成功调用都将导致向其发送 SIGTRAP 信号,从而使父进程有机会在新程序开始执行之前获得控制权。 当跟踪器完成跟踪后,它可以通过 PTRACE_DETACH 使被跟踪者继续以正常的、未跟踪的模式执行。
request的值决定了ptrace要执行的操作:
(这一部分实在太多,而且难懂,用到的就翻译一下,没用到的先搁置)
- PTRACE_TRACEME
- 表示这个进程被它的父进程跟踪。
- 如果它的父进程不希望追踪它,那么该进程很可能不应该发起该request。
- pid、addr、data被忽略。
- PTRACE_PEEKTEXT,PTRACE_PEEKDATA
- 从tracess的内存的地址addr处读取一个字,返回读取的字作为
ptrace()
的调用结果。 - LInux没有单独的text和data地址空间,所以这两个目前是等效的。
- data被忽略,但是请注意NOTES。
- 从tracess的内存的地址addr处读取一个字,返回读取的字作为
- PTRACE_PEEKUSER
- 从tracee的USER区域的addr偏移处读取一个字,USER区域包含了寄存器和其他信息(见
<sys/user.h>
)。 - 返回读取的字。
- 通常,偏移量应该是字对齐的,这个随架构变化,见NOTES。
- data被忽略,但是请看看NOTES。
- 从tracee的USER区域的addr偏移处读取一个字,USER区域包含了寄存器和其他信息(见
- PTRACE_GETREGS, PTRACE_GETREGS
- 复制tracee的通用寄存器和浮点寄存器到tracer的data地址处。
- 查看
<sys/user.h>
以获取有关格式的信息。 - addr被忽略。
- 注意SPARC的data和addr是相反的。
- 这两个不是在所有架构都提供有。
- PTRACE_SETREGS, PTRACE_SETPREGS
- 以tracer的data处的数据分别修改tracee的通用寄存器或者浮点寄存器。
- 至于
PTRACE_POKEUSER
,一些通用寄存器的修改可能不被允许。 - addr被忽略。
- 注意SPARC的data和addr是相反的。
- 这两个不是在所有架构都提供有。
附代码例子
一份来自github的代码,有助于理解ptrace的使用:
(原链接:https://gist.github.com/willb/14488)
/*
ptr_inspect.c
Demonstration code; shows how to trace the system calls in a child
process with ptrace. Only works on 64-bit x86 Linux for now, I'm
afraid. (Even worse, it's only tested on Linux 2.6....)
The callname() function looks clunky and machine-generated because it
*is* clunky and machine-generated.
I got inspiration and a starting point from this old LJ article:
http://www.linuxjournal.com/article/6100
I release this code to the public domain. Share and enjoy.
Will Benton
Madison, 2008
*/
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/user.h>
#include <syscall.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
const char *callname (long call);
#if __WORDSIZE == 64
#define REG(reg) reg.orig_rax
#else
#define REG(reg) reg.orig_eax
#endif
int main (int argc, char *argv[])
{
pid_t child;
if (argc == 1) {
return 0;
}
char *chargs[argc];
int i = 0;
for (; i < argc - 1; ++i) {
chargs[i] = argv[i + 1];
}
chargs[i] = NULL;
child = fork();
if (child == 0) {
ptrace (PTRACE_TRACEME, 0, NULL, NULL);
execvp (chargs[0], chargs);
} else {
int status;
while (waitpid (child, &status, 0) && ! WIFEXITED (status)) {
struct user_regs_struct regs;
ptrace (PTRACE_GETREGS, child, NULL, ®s);
fprintf (stderr, "system call %s from pid %d\n", callname (REG (regs)), child);
ptrace (PTRACE_SYSCALL, child, NULL, NULL);
}
}
return 0;
}
/* callname */
static char *callname_buf[256];
const char *callname (long call)
{
switch (call) {
#ifdef SYS__sysctl
case SYS__sysctl :
return "_sysctl";
#endif
#ifdef SYS_access
case SYS_access :
return "access";
#endif
#ifdef SYS_acct
case SYS_acct :
return "acct";
#endif
#ifdef SYS_add_key
case SYS_add_key :
return "add_key";
#endif
#ifdef SYS_adjtimex
case SYS_adjtimex :
return "adjtimex";
#endif
#ifdef SYS_afs_syscall
case SYS_afs_syscall :
return "afs_syscall";
#endif
#ifdef SYS_alarm
case SYS_alarm :
return "alarm";
#endif
#ifdef SYS_brk
case SYS_brk :
return "brk";
#endif
#ifdef SYS_capget
case SYS_capget :
return "capget";
#endif
#ifdef SYS_capset
case SYS_capset :
return "capset";
#endif
#ifdef SYS_chdir
case SYS_chdir :
return "chdir";
#endif
#ifdef SYS_chmod
case SYS_chmod :
return "chmod";
#endif
#ifdef SYS_chown
case SYS_chown :
return "chown";
#endif
#ifdef SYS_chroot
case SYS_chroot :
return "chroot";
#endif
#ifdef SYS_clock_getres
case SYS_clock_getres :
return "clock_getres";
#endif
#ifdef SYS_clock_gettime
case SYS_clock_gettime :
return "clock_gettime";
#endif
#ifdef SYS_clock_nanosleep
case SYS_clock_nanosleep :
return "clock_nanosleep";
#endif
#ifdef SYS_clock_settime
case SYS_clock_settime :
return "clock_settime";
#endif
#ifdef SYS_clone
case SYS_clone :
return "clone";
#endif
#ifdef SYS_close
case SYS_close :
return "close";
#endif
#ifdef SYS_creat
case SYS_creat :
return "creat";
#endif
#ifdef SYS_create_module
case SYS_create_module :
return "create_module";
#endif
#ifdef SYS_delete_module
case SYS_delete_module :
return "delete_module";
#endif
#ifdef SYS_dup
case SYS_dup :
return "dup";
#endif
#ifdef SYS_dup2
case SYS_dup2 :
return "dup2";
#endif
#ifdef SYS_epoll_create
case SYS_epoll_create :
return "epoll_create";
#endif
#ifdef SYS_epoll_ctl
case SYS_epoll_ctl :
return "epoll_ctl";
#endif
#ifdef SYS_epoll_pwait
case SYS_epoll_pwait :
return "epoll_pwait";
#endif
#ifdef SYS_epoll_wait
case SYS_epoll_wait :
return "epoll_wait";
#endif
#ifdef SYS_eventfd
case SYS_eventfd :
return "eventfd";
#endif
#ifdef SYS_execve
case SYS_execve :
return "execve";
#endif
#ifdef SYS_exit
case SYS_exit :
return "exit";
#endif
#ifdef SYS_exit_group
case SYS_exit_group :
return "exit_group";
#endif
#ifdef SYS_faccessat
case SYS_faccessat :
return "faccessat";
#endif
#ifdef SYS_fadvise64
case SYS_fadvise64 :
return "fadvise64";
#endif
#ifdef SYS_fallocate
case SYS_fallocate :
return "fallocate";
#endif
#ifdef SYS_fchdir
case SYS_fchdir :
return "fchdir";
#endif
#ifdef SYS_fchmod
case SYS_fchmod :
return "fchmod";
#endif
#ifdef SYS_fchmodat
case SYS_fchmodat :
return "fchmodat";
#endif
#ifdef SYS_fchown
case SYS_fchown :
return "fchown";
#endif
#ifdef SYS_fchownat
case SYS_fchownat :
return "fchownat";
#endif
#ifdef SYS_fcntl
case SYS_fcntl :
return "fcntl";
#endif
#ifdef SYS_fdatasync
case SYS_fdatasync :
return "fdatasync";
#endif
#ifdef SYS_fgetxattr
case SYS_fgetxattr :
return "fgetxattr";
#endif
#ifdef SYS_flistxattr
case SYS_flistxattr :
return "flistxattr";
#endif
#ifdef SYS_flock
case SYS_flock :
return "flock";
#endif
#ifdef SYS_fork
case SYS_fork :
return "fork";
#endif
#ifdef SYS_fremovexattr
case SYS_fremovexattr :
return "fremovexattr";
#endif
#ifdef SYS_fsetxattr
case SYS_fsetxattr :
return "fsetxattr";
#endif
#ifdef SYS_fstat
case SYS_fstat :
return "fstat";
#endif
#ifdef SYS_fstatfs
case SYS_fstatfs :
return "fstatfs";
#endif
#ifdef SYS_fsync
case SYS_fsync :
return "fsync";
#endif
#ifdef SYS_ftruncate
case SYS_ftruncate :
return "ftruncate";
#endif
#ifdef SYS_futex
case SYS_futex :
return "futex";
#endif
#ifdef SYS_futimesat
case SYS_futimesat :
return "futimesat";
#endif
#ifdef SYS_get_kernel_syms
case SYS_get_kernel_syms :
return "get_kernel_syms";
#endif
#ifdef SYS_get_mempolicy
case SYS_get_mempolicy :
return "get_mempolicy";
#endif
#ifdef SYS_get_robust_list
case SYS_get_robust_list :
return "get_robust_list";
#endif
#ifdef SYS_get_thread_area
case SYS_get_thread_area :
return "get_thread_area";
#endif
#ifdef SYS_getcwd
case SYS_getcwd :
return "getcwd";
#endif
#ifdef SYS_getdents
case SYS_getdents :
return "getdents";
#endif
#ifdef SYS_getdents64
case SYS_getdents64 :
return "getdents64";
#endif
#ifdef SYS_getegid
case SYS_getegid :
return "getegid";
#endif
#ifdef SYS_geteuid
case SYS_geteuid :
return "geteuid";
#endif
#ifdef SYS_getgid
case SYS_getgid :
return "getgid";
#endif
#ifdef SYS_getgroups
case SYS_getgroups :
return "getgroups";
#endif
#ifdef SYS_getitimer
case SYS_getitimer :
return "getitimer";
#endif
#ifdef SYS_getpgid
case SYS_getpgid :
return "getpgid";
#endif
#ifdef SYS_getpgrp
case SYS_getpgrp :
return "getpgrp";
#endif
#ifdef SYS_getpid
case SYS_getpid :
return "getpid";
#endif
#ifdef SYS_getpmsg
case SYS_getpmsg :
return "getpmsg";
#endif
#ifdef SYS_getppid
case SYS_getppid :
return "getppid";
#endif
#ifdef SYS_getpriority
case SYS_getpriority :
return "getpriority";
#endif
#ifdef SYS_getresgid
case SYS_getresgid :
return "getresgid";
#endif
#ifdef SYS_getresuid
case SYS_getresuid :
return "getresuid";
#endif
#ifdef SYS_getrlimit
case SYS_getrlimit :
return "getrlimit";
#endif
#ifdef SYS_getrusage
case SYS_getrusage :
return "getrusage";
#endif
#ifdef SYS_getsid
case SYS_getsid :
return "getsid";
#endif
#ifdef SYS_gettid
case SYS_gettid :
return "gettid";
#endif
#ifdef SYS_gettimeofday
case SYS_gettimeofday :
return "gettimeofday";
#endif
#ifdef SYS_getuid
case SYS_getuid :
return "getuid";
#endif
#ifdef SYS_getxattr
case SYS_getxattr :
return "getxattr";
#endif
#ifdef SYS_init_module
case SYS_init_module :
return "init_module";
#endif
#ifdef SYS_inotify_add_watch
case SYS_inotify_add_watch :
return "inotify_add_watch";
#endif
#ifdef SYS_inotify_init
case SYS_inotify_init :
return "inotify_init";
#endif
#ifdef SYS_inotify_rm_watch
case SYS_inotify_rm_watch :
return "inotify_rm_watch";
#endif
#ifdef SYS_io_cancel
case SYS_io_cancel :
return "io_cancel";
#endif
#ifdef SYS_io_destroy
case SYS_io_destroy :
return "io_destroy";
#endif
#ifdef SYS_io_getevents
case SYS_io_getevents :
return "io_getevents";
#endif
#ifdef SYS_io_setup
case SYS_io_setup :
return "io_setup";
#endif
#ifdef SYS_io_submit
case SYS_io_submit :
return "io_submit";
#endif
#ifdef SYS_ioctl
case SYS_ioctl :
return "ioctl";
#endif
#ifdef SYS_ioperm
case SYS_ioperm :
return "ioperm";
#endif
#ifdef SYS_iopl
case SYS_iopl :
return "iopl";
#endif
#ifdef SYS_ioprio_get
case SYS_ioprio_get :
return "ioprio_get";
#endif
#ifdef SYS_ioprio_set
case SYS_ioprio_set :
return "ioprio_set";
#endif
#ifdef SYS_kexec_load
case SYS_kexec_load :
return "kexec_load";
#endif
#ifdef SYS_keyctl
case SYS_keyctl :
return "keyctl";
#endif
#ifdef SYS_kill
case SYS_kill :
return "kill";
#endif
#ifdef SYS_lchown
case SYS_lchown :
return "lchown";
#endif
#ifdef SYS_lgetxattr
case SYS_lgetxattr :
return "lgetxattr";
#endif
#ifdef SYS_link
case SYS_link :
return "link";
#endif
#ifdef SYS_linkat
case SYS_linkat :
return "linkat";
#endif
#ifdef SYS_listxattr
case SYS_listxattr :
return "listxattr";
#endif
#ifdef SYS_llistxattr
case SYS_llistxattr :
return "llistxattr";
#endif
#ifdef SYS_lookup_dcookie
case SYS_lookup_dcookie :
return "lookup_dcookie";
#endif
#ifdef SYS_lremovexattr
case SYS_lremovexattr :
return "lremovexattr";
#endif
#ifdef SYS_lseek
case SYS_lseek :
return "lseek";
#endif
#ifdef SYS_lsetxattr
case SYS_lsetxattr :
return "lsetxattr";
#endif
#ifdef SYS_lstat
case SYS_lstat :
return "lstat";
#endif
#ifdef SYS_madvise
case SYS_madvise :
return "madvise";
#endif
#ifdef SYS_mbind
case SYS_mbind :
return "mbind";
#endif
#ifdef SYS_migrate_pages
case SYS_migrate_pages :
return "migrate_pages";
#endif
#ifdef SYS_mincore
case SYS_mincore :
return "mincore";
#endif
#ifdef SYS_mkdir
case SYS_mkdir :
return "mkdir";
#endif
#ifdef SYS_mkdirat
case SYS_mkdirat :
return "mkdirat";
#endif
#ifdef SYS_mknod
case SYS_mknod :
return "mknod";
#endif
#ifdef SYS_mknodat
case SYS_mknodat :
return "mknodat";
#endif
#ifdef SYS_mlock
case SYS_mlock :
return "mlock";
#endif
#ifdef SYS_mlockall
case SYS_mlockall :
return "mlockall";
#endif
#ifdef SYS_mmap
case SYS_mmap :
return "mmap";
#endif
#ifdef SYS_modify_ldt
case SYS_modify_ldt :
return "modify_ldt";
#endif
#ifdef SYS_mount
case SYS_mount :
return "mount";
#endif
#ifdef SYS_move_pages
case SYS_move_pages :
return "move_pages";
#endif
#ifdef SYS_mprotect
case SYS_mprotect :
return "mprotect";
#endif
#ifdef SYS_mq_getsetattr
case SYS_mq_getsetattr :
return "mq_getsetattr";
#endif
#ifdef SYS_mq_notify
case SYS_mq_notify :
return "mq_notify";
#endif
#ifdef SYS_mq_open
case SYS_mq_open :
return "mq_open";
#endif
#ifdef SYS_mq_timedreceive
case SYS_mq_timedreceive :
return "mq_timedreceive";
#endif
#ifdef SYS_mq_timedsend
case SYS_mq_timedsend :
return "mq_timedsend";
#endif
#ifdef SYS_mq_unlink
case SYS_mq_unlink :
return "mq_unlink";
#endif
#ifdef SYS_mremap
case SYS_mremap :
return "mremap";
#endif
#ifdef SYS_msync
case SYS_msync :
return "msync";
#endif
#ifdef SYS_munlock
case SYS_munlock :
return "munlock";
#endif
#ifdef SYS_munlockall
case SYS_munlockall :
return "munlockall";
#endif
#ifdef SYS_munmap
case SYS_munmap :
return "munmap";
#endif
#ifdef SYS_nanosleep
case SYS_nanosleep :
return "nanosleep";
#endif
#ifdef SYS_nfsservctl
case SYS_nfsservctl :
return "nfsservctl";
#endif
#ifdef SYS_open
case SYS_open :
return "open";
#endif
#ifdef SYS_openat
case SYS_openat :
return "openat";
#endif
#ifdef SYS_pause
case SYS_pause :
return "pause";
#endif
#ifdef SYS_personality
case SYS_personality :
return "personality";
#endif
#ifdef SYS_pipe
case SYS_pipe :
return "pipe";
#endif
#ifdef SYS_pivot_root
case SYS_pivot_root :
return "pivot_root";
#endif
#ifdef SYS_poll
case SYS_poll :
return "poll";
#endif
#ifdef SYS_ppoll
case SYS_ppoll :
return "ppoll";
#endif
#ifdef SYS_prctl
case SYS_prctl :
return "prctl";
#endif
#ifdef SYS_pread64
case SYS_pread64 :
return "pread64";
#endif
#ifdef SYS_pselect6
case SYS_pselect6 :
return "pselect6";
#endif
#ifdef SYS_ptrace
case SYS_ptrace :
return "ptrace";
#endif
#ifdef SYS_putpmsg
case SYS_putpmsg :
return "putpmsg";
#endif
#ifdef SYS_pwrite64
case SYS_pwrite64 :
return "pwrite64";
#endif
#ifdef SYS_query_module
case SYS_query_module :
return "query_module";
#endif
#ifdef SYS_quotactl
case SYS_quotactl :
return "quotactl";
#endif
#ifdef SYS_read
case SYS_read :
return "read";
#endif
#ifdef SYS_readahead
case SYS_readahead :
return "readahead";
#endif
#ifdef SYS_readlink
case SYS_readlink :
return "readlink";
#endif
#ifdef SYS_readlinkat
case SYS_readlinkat :
return "readlinkat";
#endif
#ifdef SYS_readv
case SYS_readv :
return "readv";
#endif
#ifdef SYS_reboot
case SYS_reboot :
return "reboot";
#endif
#ifdef SYS_remap_file_pages
case SYS_remap_file_pages :
return "remap_file_pages";
#endif
#ifdef SYS_removexattr
case SYS_removexattr :
return "removexattr";
#endif
#ifdef SYS_rename
case SYS_rename :
return "rename";
#endif
#ifdef SYS_renameat
case SYS_renameat :
return "renameat";
#endif
#ifdef SYS_request_key
case SYS_request_key :
return "request_key";
#endif
#ifdef SYS_restart_syscall
case SYS_restart_syscall :
return "restart_syscall";
#endif
#ifdef SYS_rmdir
case SYS_rmdir :
return "rmdir";
#endif
#ifdef SYS_rt_sigaction
case SYS_rt_sigaction :
return "rt_sigaction";
#endif
#ifdef SYS_rt_sigpending
case SYS_rt_sigpending :
return "rt_sigpending";
#endif
#ifdef SYS_rt_sigprocmask
case SYS_rt_sigprocmask :
return "rt_sigprocmask";
#endif
#ifdef SYS_rt_sigqueueinfo
case SYS_rt_sigqueueinfo :
return "rt_sigqueueinfo";
#endif
#ifdef SYS_rt_sigreturn
case SYS_rt_sigreturn :
return "rt_sigreturn";
#endif
#ifdef SYS_rt_sigsuspend
case SYS_rt_sigsuspend :
return "rt_sigsuspend";
#endif
#ifdef SYS_rt_sigtimedwait
case SYS_rt_sigtimedwait :
return "rt_sigtimedwait";
#endif
#ifdef SYS_sched_get_priority_max
case SYS_sched_get_priority_max :
return "sched_get_priority_max";
#endif
#ifdef SYS_sched_get_priority_min
case SYS_sched_get_priority_min :
return "sched_get_priority_min";
#endif
#ifdef SYS_sched_getaffinity
case SYS_sched_getaffinity :
return "sched_getaffinity";
#endif
#ifdef SYS_sched_getparam
case SYS_sched_getparam :
return "sched_getparam";
#endif
#ifdef SYS_sched_getscheduler
case SYS_sched_getscheduler :
return "sched_getscheduler";
#endif
#ifdef SYS_sched_rr_get_interval
case SYS_sched_rr_get_interval :
return "sched_rr_get_interval";
#endif
#ifdef SYS_sched_setaffinity
case SYS_sched_setaffinity :
return "sched_setaffinity";
#endif
#ifdef SYS_sched_setparam
case SYS_sched_setparam :
return "sched_setparam";
#endif
#ifdef SYS_sched_setscheduler
case SYS_sched_setscheduler :
return "sched_setscheduler";
#endif
#ifdef SYS_sched_yield
case SYS_sched_yield :
return "sched_yield";
#endif
#ifdef SYS_select
case SYS_select :
return "select";
#endif
#ifdef SYS_sendfile
case SYS_sendfile :
return "sendfile";
#endif
#ifdef SYS_set_mempolicy
case SYS_set_mempolicy :
return "set_mempolicy";
#endif
#ifdef SYS_set_robust_list
case SYS_set_robust_list :
return "set_robust_list";
#endif
#ifdef SYS_set_thread_area
case SYS_set_thread_area :
return "set_thread_area";
#endif
#ifdef SYS_set_tid_address
case SYS_set_tid_address :
return "set_tid_address";
#endif
#ifdef SYS_setdomainname
case SYS_setdomainname :
return "setdomainname";
#endif
#ifdef SYS_setfsgid
case SYS_setfsgid :
return "setfsgid";
#endif
#ifdef SYS_setfsuid
case SYS_setfsuid :
return "setfsuid";
#endif
#ifdef SYS_setgid
case SYS_setgid :
return "setgid";
#endif
#ifdef SYS_setgroups
case SYS_setgroups :
return "setgroups";
#endif
#ifdef SYS_sethostname
case SYS_sethostname :
return "sethostname";
#endif
#ifdef SYS_setitimer
case SYS_setitimer :
return "setitimer";
#endif
#ifdef SYS_setpgid
case SYS_setpgid :
return "setpgid";
#endif
#ifdef SYS_setpriority
case SYS_setpriority :
return "setpriority";
#endif
#ifdef SYS_setregid
case SYS_setregid :
return "setregid";
#endif
#ifdef SYS_setresgid
case SYS_setresgid :
return "setresgid";
#endif
#ifdef SYS_setresuid
case SYS_setresuid :
return "setresuid";
#endif
#ifdef SYS_setreuid
case SYS_setreuid :
return "setreuid";
#endif
#ifdef SYS_setrlimit
case SYS_setrlimit :
return "setrlimit";
#endif
#ifdef SYS_setsid
case SYS_setsid :
return "setsid";
#endif
#ifdef SYS_settimeofday
case SYS_settimeofday :
return "settimeofday";
#endif
#ifdef SYS_setuid
case SYS_setuid :
return "setuid";
#endif
#ifdef SYS_setxattr
case SYS_setxattr :
return "setxattr";
#endif
#ifdef SYS_sigaltstack
case SYS_sigaltstack :
return "sigaltstack";
#endif
#ifdef SYS_signalfd
case SYS_signalfd :
return "signalfd";
#endif
#ifdef SYS_splice
case SYS_splice :
return "splice";
#endif
#ifdef SYS_stat
case SYS_stat :
return "stat";
#endif
#ifdef SYS_statfs
case SYS_statfs :
return "statfs";
#endif
#ifdef SYS_swapoff
case SYS_swapoff :
return "swapoff";
#endif
#ifdef SYS_swapon
case SYS_swapon :
return "swapon";
#endif
#ifdef SYS_symlink
case SYS_symlink :
return "symlink";
#endif
#ifdef SYS_symlinkat
case SYS_symlinkat :
return "symlinkat";
#endif
#ifdef SYS_sync
case SYS_sync :
return "sync";
#endif
#ifdef SYS_sync_file_range
case SYS_sync_file_range :
return "sync_file_range";
#endif
#ifdef SYS_sysfs
case SYS_sysfs :
return "sysfs";
#endif
#ifdef SYS_sysinfo
case SYS_sysinfo :
return "sysinfo";
#endif
#ifdef SYS_syslog
case SYS_syslog :
return "syslog";
#endif
#ifdef SYS_tee
case SYS_tee :
return "tee";
#endif
#ifdef SYS_tgkill
case SYS_tgkill :
return "tgkill";
#endif
#ifdef SYS_time
case SYS_time :
return "time";
#endif
#ifdef SYS_timer_create
case SYS_timer_create :
return "timer_create";
#endif
#ifdef SYS_timer_delete
case SYS_timer_delete :
return "timer_delete";
#endif
#ifdef SYS_timer_getoverrun
case SYS_timer_getoverrun :
return "timer_getoverrun";
#endif
#ifdef SYS_timer_gettime
case SYS_timer_gettime :
return "timer_gettime";
#endif
#ifdef SYS_timer_settime
case SYS_timer_settime :
return "timer_settime";
#endif
#ifdef SYS_timerfd_create
case SYS_timerfd_create :
return "timerfd_create";
#endif
#ifdef SYS_timerfd_gettime
case SYS_timerfd_gettime :
return "timerfd_gettime";
#endif
#ifdef SYS_timerfd_settime
case SYS_timerfd_settime :
return "timerfd_settime";
#endif
#ifdef SYS_times
case SYS_times :
return "times";
#endif
#ifdef SYS_tkill
case SYS_tkill :
return "tkill";
#endif
#ifdef SYS_truncate
case SYS_truncate :
return "truncate";
#endif
#ifdef SYS_umask
case SYS_umask :
return "umask";
#endif
#ifdef SYS_umount2
case SYS_umount2 :
return "umount2";
#endif
#ifdef SYS_uname
case SYS_uname :
return "uname";
#endif
#ifdef SYS_unlink
case SYS_unlink :
return "unlink";
#endif
#ifdef SYS_unlinkat
case SYS_unlinkat :
return "unlinkat";
#endif
#ifdef SYS_unshare
case SYS_unshare :
return "unshare";
#endif
#ifdef SYS_uselib
case SYS_uselib :
return "uselib";
#endif
#ifdef SYS_ustat
case SYS_ustat :
return "ustat";
#endif
#ifdef SYS_utime
case SYS_utime :
return "utime";
#endif
#ifdef SYS_utimensat
case SYS_utimensat :
return "utimensat";
#endif
#ifdef SYS_utimes
case SYS_utimes :
return "utimes";
#endif
#ifdef SYS_vfork
case SYS_vfork :
return "vfork";
#endif
#ifdef SYS_vhangup
case SYS_vhangup :
return "vhangup";
#endif
#ifdef SYS_vmsplice
case SYS_vmsplice :
return "vmsplice";
#endif
#ifdef SYS_vserver
case SYS_vserver :
return "vserver";
#endif
#ifdef SYS_wait4
case SYS_wait4 :
return "wait4";
#endif
#ifdef SYS_waitid
case SYS_waitid :
return "waitid";
#endif
#ifdef SYS_write
case SYS_write :
return "write";
#endif
#ifdef SYS_writev
case SYS_writev :
return "writev";
#endif
#ifdef SYS_accept
case SYS_accept :
return "accept";
#endif
#ifdef SYS_arch_prctl
case SYS_arch_prctl :
return "arch_prctl";
#endif
#ifdef SYS_bind
case SYS_bind :
return "bind";
#endif
#ifdef SYS_connect
case SYS_connect :
return "connect";
#endif
#ifdef SYS_epoll_ctl_old
case SYS_epoll_ctl_old :
return "epoll_ctl_old";
#endif
#ifdef SYS_epoll_wait_old
case SYS_epoll_wait_old :
return "epoll_wait_old";
#endif
#ifdef SYS_getpeername
case SYS_getpeername :
return "getpeername";
#endif
#ifdef SYS_getsockname
case SYS_getsockname :
return "getsockname";
#endif
#ifdef SYS_getsockopt
case SYS_getsockopt :
return "getsockopt";
#endif
#ifdef SYS_listen
case SYS_listen :
return "listen";
#endif
#ifdef SYS_msgctl
case SYS_msgctl :
return "msgctl";
#endif
#ifdef SYS_msgget
case SYS_msgget :
return "msgget";
#endif
#ifdef SYS_msgrcv
case SYS_msgrcv :
return "msgrcv";
#endif
#ifdef SYS_msgsnd
case SYS_msgsnd :
return "msgsnd";
#endif
#ifdef SYS_newfstatat
case SYS_newfstatat :
return "newfstatat";
#endif
#ifdef SYS_recvfrom
case SYS_recvfrom :
return "recvfrom";
#endif
#ifdef SYS_recvmsg
case SYS_recvmsg :
return "recvmsg";
#endif
#ifdef SYS_security
case SYS_security :
return "security";
#endif
#ifdef SYS_semctl
case SYS_semctl :
return "semctl";
#endif
#ifdef SYS_semget
case SYS_semget :
return "semget";
#endif
#ifdef SYS_semop
case SYS_semop :
return "semop";
#endif
#ifdef SYS_semtimedop
case SYS_semtimedop :
return "semtimedop";
#endif
#ifdef SYS_sendmsg
case SYS_sendmsg :
return "sendmsg";
#endif
#ifdef SYS_sendto
case SYS_sendto :
return "sendto";
#endif
#ifdef SYS_setsockopt
case SYS_setsockopt :
return "setsockopt";
#endif
#ifdef SYS_shmat
case SYS_shmat :
return "shmat";
#endif
#ifdef SYS_shmctl
case SYS_shmctl :
return "shmctl";
#endif
#ifdef SYS_shmdt
case SYS_shmdt :
return "shmdt";
#endif
#ifdef SYS_shmget
case SYS_shmget :
return "shmget";
#endif
#ifdef SYS_shutdown
case SYS_shutdown :
return "shutdown";
#endif
#ifdef SYS_socket
case SYS_socket :
return "socket";
#endif
#ifdef SYS_socketpair
case SYS_socketpair :
return "socketpair";
#endif
#ifdef SYS_tuxcall
case SYS_tuxcall :
return "tuxcall";
#endif
#ifdef SYS__llseek
case SYS__llseek :
return "_llseek";
#endif
#ifdef SYS__newselect
case SYS__newselect :
return "_newselect";
#endif
#ifdef SYS_bdflush
case SYS_bdflush :
return "bdflush";
#endif
#ifdef SYS_break
case SYS_break :
return "break";
#endif
#ifdef SYS_chown32
case SYS_chown32 :
return "chown32";
#endif
#ifdef SYS_fadvise64_64
case SYS_fadvise64_64 :
return "fadvise64_64";
#endif
#ifdef SYS_fchown32
case SYS_fchown32 :
return "fchown32";
#endif
#ifdef SYS_fcntl64
case SYS_fcntl64 :
return "fcntl64";
#endif
#ifdef SYS_fstat64
case SYS_fstat64 :
return "fstat64";
#endif
#ifdef SYS_fstatat64
case SYS_fstatat64 :
return "fstatat64";
#endif
#ifdef SYS_fstatfs64
case SYS_fstatfs64 :
return "fstatfs64";
#endif
#ifdef SYS_ftime
case SYS_ftime :
return "ftime";
#endif
#ifdef SYS_ftruncate64
case SYS_ftruncate64 :
return "ftruncate64";
#endif
#ifdef SYS_getcpu
case SYS_getcpu :
return "getcpu";
#endif
#ifdef SYS_getegid32
case SYS_getegid32 :
return "getegid32";
#endif
#ifdef SYS_geteuid32
case SYS_geteuid32 :
return "geteuid32";
#endif
#ifdef SYS_getgid32
case SYS_getgid32 :
return "getgid32";
#endif
#ifdef SYS_getgroups32
case SYS_getgroups32 :
return "getgroups32";
#endif
#ifdef SYS_getresgid32
case SYS_getresgid32 :
return "getresgid32";
#endif
#ifdef SYS_getresuid32
case SYS_getresuid32 :
return "getresuid32";
#endif
#ifdef SYS_getuid32
case SYS_getuid32 :
return "getuid32";
#endif
#ifdef SYS_gtty
case SYS_gtty :
return "gtty";
#endif
#ifdef SYS_idle
case SYS_idle :
return "idle";
#endif
#ifdef SYS_ipc
case SYS_ipc :
return "ipc";
#endif
#ifdef SYS_lchown32
case SYS_lchown32 :
return "lchown32";
#endif
#ifdef SYS_lock
case SYS_lock :
return "lock";
#endif
#ifdef SYS_lstat64
case SYS_lstat64 :
return "lstat64";
#endif
#ifdef SYS_madvise1
case SYS_madvise1 :
return "madvise1";
#endif
#ifdef SYS_mmap2
case SYS_mmap2 :
return "mmap2";
#endif
#ifdef SYS_mpx
case SYS_mpx :
return "mpx";
#endif
#ifdef SYS_nice
case SYS_nice :
return "nice";
#endif
#ifdef SYS_oldfstat
case SYS_oldfstat :
return "oldfstat";
#endif
#ifdef SYS_oldlstat
case SYS_oldlstat :
return "oldlstat";
#endif
#ifdef SYS_oldolduname
case SYS_oldolduname :
return "oldolduname";
#endif
#ifdef SYS_oldstat
case SYS_oldstat :
return "oldstat";
#endif
#ifdef SYS_olduname
case SYS_olduname :
return "olduname";
#endif
#ifdef SYS_prof
case SYS_prof :
return "prof";
#endif
#ifdef SYS_profil
case SYS_profil :
return "profil";
#endif
#ifdef SYS_readdir
case SYS_readdir :
return "readdir";
#endif
#ifdef SYS_sendfile64
case SYS_sendfile64 :
return "sendfile64";
#endif
#ifdef SYS_setfsgid32
case SYS_setfsgid32 :
return "setfsgid32";
#endif
#ifdef SYS_setfsuid32
case SYS_setfsuid32 :
return "setfsuid32";
#endif
#ifdef SYS_setgid32
case SYS_setgid32 :
return "setgid32";
#endif
#ifdef SYS_setgroups32
case SYS_setgroups32 :
return "setgroups32";
#endif
#ifdef SYS_setregid32
case SYS_setregid32 :
return "setregid32";
#endif
#ifdef SYS_setresgid32
case SYS_setresgid32 :
return "setresgid32";
#endif
#ifdef SYS_setresuid32
case SYS_setresuid32 :
return "setresuid32";
#endif
#ifdef SYS_setreuid32
case SYS_setreuid32 :
return "setreuid32";
#endif
#ifdef SYS_setuid32
case SYS_setuid32 :
return "setuid32";
#endif
#ifdef SYS_sgetmask
case SYS_sgetmask :
return "sgetmask";
#endif
#ifdef SYS_sigaction
case SYS_sigaction :
return "sigaction";
#endif
#ifdef SYS_signal
case SYS_signal :
return "signal";
#endif
#ifdef SYS_sigpending
case SYS_sigpending :
return "sigpending";
#endif
#ifdef SYS_sigprocmask
case SYS_sigprocmask :
return "sigprocmask";
#endif
#ifdef SYS_sigreturn
case SYS_sigreturn :
return "sigreturn";
#endif
#ifdef SYS_sigsuspend
case SYS_sigsuspend :
return "sigsuspend";
#endif
#ifdef SYS_socketcall
case SYS_socketcall :
return "socketcall";
#endif
#ifdef SYS_ssetmask
case SYS_ssetmask :
return "ssetmask";
#endif
#ifdef SYS_stat64
case SYS_stat64 :
return "stat64";
#endif
#ifdef SYS_statfs64
case SYS_statfs64 :
return "statfs64";
#endif
#ifdef SYS_stime
case SYS_stime :
return "stime";
#endif
#ifdef SYS_stty
case SYS_stty :
return "stty";
#endif
#ifdef SYS_truncate64
case SYS_truncate64 :
return "truncate64";
#endif
#ifdef SYS_ugetrlimit
case SYS_ugetrlimit :
return "ugetrlimit";
#endif
#ifdef SYS_ulimit
case SYS_ulimit :
return "ulimit";
#endif
#ifdef SYS_umount
case SYS_umount :
return "umount";
#endif
#ifdef SYS_vm86
case SYS_vm86 :
return "vm86";
#endif
#ifdef SYS_vm86old
case SYS_vm86old :
return "vm86old";
#endif
#ifdef SYS_waitpid
case SYS_waitpid :
return "waitpid";
#endif
default:
return "unknown";
}
}