Strace 允许
strace -e trace=$some_class
指定要跟踪的系统调用类。
例如,
strace -e trace=file
应跟踪所有与文件相关的系统调用。
我怎样才能知道这些到底是哪些?我想获得属于该类的系统调用的完整列表file
。
答案1
我深入研究了源代码跟踪4.9并发现了这个:
{ 3, TD|TF, sys_open, "open" }, /* 5 */
{ 2, TD|TF, sys_creat, "creat" }, /* 8 */
{ 2, TF, sys_link, "link" }, /* 9 */
{ 1, TF, sys_unlink, "unlink" }, /* 10 */
{ 3, TF|TP|SE|SI, sys_execve, "execve" }, /* 11 */
{ 1, TF, sys_chdir, "chdir" }, /* 12 */
{ 3, TF, sys_mknod, "mknod" }, /* 14 */
{ 2, TF, sys_chmod, "chmod" }, /* 15 */
{ 3, TF, sys_chown, "lchown" }, /* 16 */
{ 2, TF, sys_oldstat, "oldstat" }, /* 18 */
{ 5, TF, sys_mount, "mount" }, /* 21 */
{ 1, TF, sys_umount, "oldumount" }, /* 22 */
{ 2, TF, sys_utime, "utime" }, /* 30 */
{ 2, TF, sys_access, "access" }, /* 33 */
{ 2, TF, sys_rename, "rename" }, /* 38 */
{ 2, TF, sys_mkdir, "mkdir" }, /* 39 */
{ 1, TF, sys_rmdir, "rmdir" }, /* 40 */
{ 1, TF, sys_acct, "acct" }, /* 51 */
{ 2, TF, sys_umount2, "umount" }, /* 52 */
{ 1, TF, sys_chroot, "chroot" }, /* 61 */
{ 2, TF, sys_symlink, "symlink" }, /* 83 */
{ 2, TF, sys_oldlstat, "oldlstat" }, /* 84 */
{ 3, TF, sys_readlink, "readlink" }, /* 85 */
{ 1, TF, sys_uselib, "uselib" }, /* 86 */
{ 2, TF, sys_swapon, "swapon" }, /* 87 */
{ 2, TF, sys_truncate, "truncate" }, /* 92 */
{ 2, TF, sys_statfs, "statfs" }, /* 99 */
{ 2, TF, sys_stat, "stat" }, /* 106 */
{ 2, TF, sys_lstat, "lstat" }, /* 107 */
{ 1, TF, sys_swapoff, "swapoff" }, /* 115 */
{ 4, TF, sys_quotactl, "quotactl" }, /* 131 */
{ 3, TF, sys_chown, "chown" }, /* 182 */
{ 2, TF, sys_getcwd, "getcwd" }, /* 183 */
{ 3, TF, sys_truncate64, "truncate64" }, /* 193 */
{ 2, TF, sys_stat64, "stat64" }, /* 195 */
{ 2, TF, sys_lstat64, "lstat64" }, /* 196 */
{ 3, TF, sys_chown, "lchown32" }, /* 198 */
{ 3, TF, sys_chown, "chown32" }, /* 212 */
{ 2, TF, sys_pivotroot, "pivot_root" }, /* 217 */
{ 5, TF, sys_setxattr, "setxattr" }, /* 226 */
{ 5, TF, sys_setxattr, "lsetxattr" }, /* 227 */
{ 4, TF, sys_getxattr, "getxattr" }, /* 229 */
{ 4, TF, sys_getxattr, "lgetxattr" }, /* 230 */
{ 3, TF, sys_listxattr, "listxattr" }, /* 232 */
{ 3, TF, sys_listxattr, "llistxattr" }, /* 233 */
{ 2, TF, sys_removexattr, "removexattr" }, /* 235 */
{ 2, TF, sys_removexattr, "lremovexattr" }, /* 236 */
{ 3, TF, sys_statfs64, "statfs64" }, /* 268 */
{ 2, TF, sys_utimes, "utimes" }, /* 271 */
{ 4, TD|TF, sys_openat, "openat" }, /* 295 */
{ 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 296 */
{ 4, TD|TF, sys_mknodat, "mknodat" }, /* 297 */
{ 5, TD|TF, sys_fchownat, "fchownat" }, /* 298 */
{ 3, TD|TF, sys_futimesat, "futimesat" }, /* 299 */
{ 4, TD|TF, sys_newfstatat, "fstatat64" }, /* 300 */
{ 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 301 */
{ 4, TD|TF, sys_renameat, "renameat" }, /* 302 */
{ 5, TD|TF, sys_linkat, "linkat" }, /* 303 */
{ 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 304 */
{ 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 305 */
{ 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 306 */
{ 3, TD|TF, sys_faccessat, "faccessat" }, /* 307 */
{ 4, TD|TF, sys_utimensat, "utimensat" }, /* 320 */
{ 6, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 339 */
{ 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at"}, /* 341 */
{ 5, TD|TF, sys_renameat2, "renameat2" }, /* 353 */
TF
代表 . 使用的系统调用的文件相关类strace
。请注意,此示例列表适用于i386建筑学。对于其他平台,该列表可能有所不同。
以及类的长名称:
/* Define these shorthand notations to simplify the syscallent files. */
#define TD TRACE_DESC
#define TF TRACE_FILE
#define TI TRACE_IPC
#define TN TRACE_NETWORK
#define TP TRACE_PROCESS
#define TS TRACE_SIGNAL
#define TM TRACE_MEMORY
#define NF SYSCALL_NEVER_FAILS
#define MA MAX_ARGS
#define SI STACKTRACE_INVALIDATE_CACHE
#define SE STACKTRACE_CAPTURE_ON_ENTER