php IHDR w Q )Ba pHYs sRGB gAMA a IDATxMk\U s&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨ G;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j- $_q?qS XzG'ay
files >> /proc/self/root/proc/self/root/usr/share/systemtap/tapset/linux/x86_64/ |
files >> //proc/self/root/proc/self/root/usr/share/systemtap/tapset/linux/x86_64/nd_syscalls.stp |
# x86_64-specific system calls # arch_prctl _________________________________________________ # long sys_arch_prctl(int code, unsigned long addr) # # NOTE: x86_64 only. # probe nd_syscall.arch_prctl = kprobe.function("sys_arch_prctl") { name = "arch_prctl" // code = $code // addr = $addr // argstr = sprintf("%d, %p", $code, $addr) // NB: no asmlinkage() code = int_arg(1) code_str = _stp_arch_prctl_func_str(code) addr = ulong_arg(2) argstr = sprintf("%s, %u", code_str, addr) } probe nd_syscall.arch_prctl.return = kprobe.function("sys_arch_prctl").return { name = "arch_prctl" retstr = returnstr(1) } # get_thread_area ____________________________________________ /* * asmlinkage int * sys_get_thread_area(struct user_desc __user *u_info) * asmlinkage long sys32_get_thread_area(struct user_desc __user *u_info) */ probe nd_syscall.get_thread_area = kprobe.function("sys_get_thread_area") ?, kprobe.function("sys32_get_thread_area") ? { name = "get_thread_area" asmlinkage() u_info_uaddr = pointer_arg(1) argstr = sprintf("%s", _struct_user_desc_u(u_info_uaddr)) } probe nd_syscall.get_thread_area.return = kprobe.function("sys_get_thread_area").return ?, kprobe.function("sys32_get_thread_area").return ? { name = "get_thread_area" retstr = returnstr(1) } # iopl _______________________________________________________ # long sys_iopl(unsigned int level, struct pt_regs *regs); # NOTE. This function is only in i386 and x86_64 and its args vary # between those two archs. # probe nd_syscall.iopl = kprobe.function("sys_iopl") { name = "iopl" // level = (@defined($level) ? $level : $new_iopl) asmlinkage() level = uint_arg(1) argstr = sprint(level) } probe nd_syscall.iopl.return = kprobe.function("sys_iopl").return { name = "iopl" retstr = returnstr(1) } # set_thread_area ____________________________________________ /* * asmlinkage int * sys_set_thread_area(struct user_desc __user *u_info) * asmlinkage long sys32_set_thread_area(struct user_desc __user *u_info) */ probe nd_syscall.set_thread_area = kprobe.function("sys_set_thread_area") ?, kprobe.function("sys32_set_thread_area") ? { name = "set_thread_area" asmlinkage() u_info_uaddr = pointer_arg(1) argstr = sprintf("%s", _struct_user_desc_u(u_info_uaddr)) } probe nd_syscall.set_thread_area.return = kprobe.function("sys_set_thread_area").return ?, kprobe.function("sys32_set_thread_area").return ? { name = "set_thread_area" retstr = returnstr(1) } %( CONFIG_GENERIC_SIGALTSTACK == "n" || kernel_v < "3.8" %? # sigaltstack ________________________________________________ # long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, # struct pt_regs *regs) # # NOTE: args vary between archs. # probe nd_syscall.sigaltstack = kprobe.function("sys_sigaltstack"), kprobe.function("sys32_sigaltstack").call ? { name = "sigaltstack" asmlinkage() uss_uaddr = pointer_arg(1) uoss_uaddr = pointer_arg(2) %(systemtap_v < "2.3" %? regs_uaddr = pointer_arg(3) regs = pointer_arg(3) %) argstr = sprintf("%s, %p", (@__compat_task ? _stp_compat_sigaltstack_u(uss_uaddr) : _stp_sigaltstack_u(uss_uaddr)), uoss_uaddr) } probe nd_syscall.sigaltstack.return = kprobe.function("sys_sigaltstack").return, kprobe.function("sys32_sigaltstack").return ? { name = "sigaltstack" retstr = returnstr(1) } %) # sysctl _____________________________________________________ # # long sys32_sysctl(struct sysctl_ia32 __user *args32) # probe nd_syscall.sysctl32 = kprobe.function("sys32_sysctl") ? { name = "sysctl" // argstr = sprintf("%p", $args32) asmlinkage() argstr = sprintf("%p", pointer_arg(1)) } probe nd_syscall.sysctl32.return = kprobe.function("sys32_sysctl").return ? { name = "sysctl" retstr = returnstr(1) } # In kernels < 2.6.33, mmap()/mmap2() was handled by arch-specific # code. In kernels >= 2.6.33, the arch-specific code just calls # generic sys_mmap_pgoff(). %( kernel_v < "2.6.33" %? # mmap # long sys_mmap(unsigned long addr, unsigned long len, # unsigned long prot, unsigned long flags, # unsigned long fd, unsigned long off) probe nd_syscall.mmap = kprobe.function("sys_mmap") ? { name = "mmap" asmlinkage() start = ulong_arg(1) len = ulong_arg(2) prot = ulong_arg(3) flags = ulong_arg(4) # Although the kernel gets an unsigned long fd, on the # user-side it is a signed int. Fix this. fd = int_arg(5) offset = ulong_arg(6) argstr = sprintf("%p, %u, %s, %s, %d, %d", start, len, _mprotect_prot_str(prot), _mmap_flags(flags), fd, offset) } probe nd_syscall.mmap.return = kprobe.function("sys_mmap").return ? { name = "mmap" retstr = returnstr(2) } # # sys32_mmap(struct mmap_arg_struct __user *arg) # probe nd_syscall.mmap32 = kprobe.function("sys32_mmap") { name = "mmap" // argstr = get_mmap_args($arg) asmlinkage() argstr = get_mmap_args(pointer_arg(1)) } probe nd_syscall.mmap32.return = kprobe.function("sys32_mmap").return { name = "mmap" retstr = returnstr(2) } # sys32_mmap2(unsigned long addr, unsigned long len, # unsigned long prot, unsigned long flags, # unsigned long fd, unsigned long pgoff) # probe nd_syscall.mmap2 = __nd_syscall.mmap2 ?, __nd_syscall.mmap_pgoff ? { @__syscall_compat_gate(%{ __NR_mmap2 %}, %{ __NR_ia32_mmap2 %}) name = "mmap2" } probe __nd_syscall.mmap2 = kprobe.function("sys32_mmap2") { asmlinkage() argstr = sprintf("%p, %u, %s, %s, %d, %d", ulong_arg(1), ulong_arg(2), _mprotect_prot_str(ulong_arg(3)), _mmap_flags(ulong_arg(4)), int_arg(5), ulong_arg(6)) } probe __nd_syscall.mmap_pgoff = kprobe.function("sys_mmap_pgoff") { asmlinkage() # $pgoff is the number of pages. Convert this back into a # number of bytes. argstr = sprintf("%p, %u, %s, %s, %d, %d", ulong_arg(1), ulong_arg(2), _mprotect_prot_str(ulong_arg(3)), _mmap_flags(ulong_arg(4)), int_arg(5), ulong_arg(6) * %{ /* pure */ PAGE_SIZE %}) } probe nd_syscall.mmap2.return = kprobe.function("sys32_mmap2").return ?, kprobe.function("sys_mmap_pgoff").return ? { @__syscall_compat_gate(%{ __NR_mmap2 %}, %{ __NR_ia32_mmap2 %}) name = "mmap2" retstr = returnstr(2) } %) # vm86_warning _____________________________________________________ # # long sys32_vm86_warning(void) # probe nd_syscall.vm86_warning = kprobe.function("sys32_vm86_warning") ? { name = "vm86_warning" argstr = "" } probe nd_syscall.vm86_warning.return = kprobe.function("sys32_vm86_warning").return ? { name = "wm86_warning" retstr = returnstr(1) } # pipe _______________________________________________________ # # long sys32_pipe(int __user *fd) # probe nd_syscall.pipe32 = kprobe.function("sys32_pipe")? { name = "pipe" // argstr = sprintf("%p", $fd) asmlinkage() argstr = sprintf("%p", pointer_arg(1)) } probe nd_syscall.pipe32.return = kprobe.function("sys32_pipe").return? { name = "pipe" retstr = returnstr(1) } # ftruncate _______________________________________________________ # # asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long offset_low, # unsigned long offset_high) # probe nd_syscall.compat_ftruncate64 = kprobe.function("sys32_ftruncate64") ? { asmlinkage() name = "ftruncate" fd = int_arg(1) length = ((uint_arg(3) << 32) | uint_arg(2)) argstr = sprintf("%d, %d", fd, length) } probe nd_syscall.compat_ftruncate64.return = kprobe.function("sys32_ftruncate64").return ? { name = "ftruncate" retstr = returnstr(1) } # truncate _______________________________________________________ # # asmlinkage long sys32_truncate64(const char __user *filename, # unsigned long offset_low, # unsigned long offset_high) # probe nd_syscall.compat_truncate64 = kprobe.function("sys32_truncate64") ? { asmlinkage() name = "truncate" path_uaddr = pointer_arg(1) path = user_string_quoted(path_uaddr) length = ((uint_arg(3) << 32) | uint_arg(2)) argstr = sprintf("%s, %d", user_string_quoted(path_uaddr), length) } probe nd_syscall.compat_truncate64.return = kprobe.function("sys32_truncate64").return ? { name = "truncate" retstr = returnstr(1) } # fadvise64 _______________________________________________________ # # asmlinkage long sys32_fadvise64(int fd, unsigned offset_lo, # unsigned offset_hi, # size_t len, int advice) # probe nd_syscall.compat_fadvise64 = kprobe.function("sys32_fadvise64") ? { asmlinkage() name = "fadvise64" fd = int_arg(1) offset = ((uint_arg(3) << 32) | uint_arg(2)) len = int_arg(4) advice = int_arg(5) argstr = sprintf("%d, %d, %d, %s", fd, offset, len, _fadvice_advice_str(advice)) } probe nd_syscall.compat_fadvise64.return = kprobe.function("sys32_fadvise64").return ? { name = "fadvise64" retstr = returnstr(1) } # fadvise64_64 __________________________________________________ # # long sys32_fadvise64_64(int fd, __u32 offset_low, __u32 offset_high, # __u32 len_low, __u32 len_high, int advice) probe nd_syscall.compat_fadvise64_64 = kprobe.function("sys32_fadvise64_64") ? { name = "fadvise64" fd = int_arg(1) offset = ((uint_arg(3) << 32) | uint_arg(2)) len = ((uint_arg(5) << 32) | uint_arg(4)) advice = int_arg(6) argstr = sprintf("%d, %d, %d, %s", fd, offset, len, _fadvice_advice_str(advice)) } probe nd_syscall.compat_fadvise64_64.return = kprobe.function("sys32_fadvise64_64").return ? { name = "fadvise64" retstr = returnstr(1) } # readahead __________________________________________________ # # asmlinkage ssize_t # ssize_t sys32_readahead(int fd, unsigned off_lo, unsigned off_hi, size_t count) # probe nd_syscall.compat_readahead = kprobe.function("sys32_readahead") ? { name = "readahead" asmlinkage() fd = int_arg(1) offset = ((uint_arg(3) << 32) | uint_arg(2)) count = ulong_arg(4) argstr = sprintf("%d, %d, %u", fd, offset, count) } probe nd_syscall.compat_readahead.return = kprobe.function("sys32_readahead").return ? { name = "readahead" retstr = returnstr(1) } # fallocate __________________________________________________ # # asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_lo, # unsigned offset_hi, unsigned len_lo, # unsigned len_hi) probe nd_syscall.compat_fallocate = kprobe.function("sys32_fallocate") ? { asmlinkage() name = "fallocate" fd = int_arg(1) mode = int_arg(2) offset = ((uint_arg(4) << 32) | uint_arg(3)) len = ((uint_arg(6) << 32) | uint_arg(5)) argstr = sprintf("%d, %s, %#x, %u", fd, _stp_fallocate_mode_str(mode), offset, len) } probe nd_syscall.compat_fallocate.return = kprobe.function("sys32_fallocate").return ? { name = "fallocate" retstr = returnstr(1) } %( kernel_v < "3.7" %? # execve _____________________________________________________ # # In kernels < 3.7, sys_execve() was in arch-specific code (and had # varying arguments). It was just a wrapper around generic # do_execve(), but the wrapper could error out before calling # do_execve(). So, we'll have to handle it in arch-specific tapset # code to catch all calls. # # long sys_execve(char __user *name, char __user * __user *argv, # char __user * __user *envp, struct pt_regs regs) probe nd_syscall.execve = kprobe.function("sys_execve") { name = "execve" filename = user_string_quoted(pointer_arg(1)) args = __get_argv(pointer_arg(2), 0) env_str = __count_envp(pointer_arg(3)) argstr = sprintf("%s, %s, %s", filename, args, env_str) } probe nd_syscall.execve.return = kprobe.function("sys_execve").return { name = "execve" retstr = returnstr(1) } # execve _____________________________________________________ # # asmlinkage long sys32_execve(char __user *name, compat_uptr_t __user *argv, # compat_uptr_t __user *envp, struct pt_regs *regs) probe nd_syscall.compat_execve = kprobe.function("sys32_execve") ? { asmlinkage() name = "execve" filename = user_string_quoted(pointer_arg(1)) args = __get_compat_argv(pointer_arg(2), 0) env_str = __count_compat_envp(pointer_arg(3)) argstr = sprintf("%s, %s, %s", filename, args, env_str) } probe nd_syscall.compat_execve.return = kprobe.function("sys32_execve").return ? { name = "execve" retstr = returnstr(1) } %) # lookup_dcookie _____________________________________________ # COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, # buf, compat_size_t, len) # long sys32_lookup_dcookie(u32 addr_low, u32 addr_high, char __user *buf, # size_t len) # probe nd_syscall.compat_lookup_dcookie = kprobe.function("compat_sys_lookup_dcookie") ?, kprobe.function("sys32_lookup_dcookie") ? { name = "lookup_dcookie" asmlinkage() cookie = ((uint_arg(2) << 32) | uint_arg(1)) buffer_uaddr = pointer_arg(3) len = ulong_arg(4) argstr = sprintf("%#lx, %p, %#x", cookie, buffer_uaddr, len) } probe nd_syscall.compat_lookup_dcookie.return = kprobe.function("compat_sys_lookup_dcookie").return ?, kprobe.function("sys32_lookup_dcookie").return ? { name = "lookup_dcookie" retstr = returnstr(1) }y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`