# x86_64-specific system calls # arch_prctl _________________________________________________ # long sys_arch_prctl(int code, unsigned long addr) # # NOTE: x86_64 only. # probe syscall.arch_prctl = kernel.function("sys_arch_prctl") { name = "arch_prctl" code = $code addr = $addr argstr = sprintf("%d, %p", $code, $addr) } probe syscall.arch_prctl.return = kernel.function("sys_arch_prctl").return { name = "arch_prctl" 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 syscall.iopl = kernel.function("sys_iopl") { name = "iopl" %( kernel_vr == "*xen" %? level = $new_iopl %: level = $level %) argstr = sprint(level) } probe syscall.iopl.return = kernel.function("sys_iopl").return { name = "iopl" retstr = returnstr(1) } # sigaltstack ________________________________________________ # long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, # struct pt_regs *regs) # # NOTE: args vary between archs. # probe syscall.sigaltstack = kernel.function("sys_sigaltstack") { name = "sigaltstack" uss_uaddr = $uss uoss_uaddr = $uoss regs_uaddr = $regs argstr = sprintf("%p, %p", $uss, $uoss) } probe syscall.sigaltstack.return = kernel.function("sys_sigaltstack").return { name = "sigaltstack" retstr = returnstr(1) } # sysctl _____________________________________________________ # # long sys32_sysctl(struct sysctl_ia32 __user *args32) # probe syscall.sysctl32 = kernel.function("sys32_sysctl") ? { name = "sysctl" argstr = sprintf("%p", $args32) } probe syscall.sysctl32.return = kernel.function("sys32_sysctl").return ? { name = "sysctl" retstr = returnstr(1) } # mmap # long sys_mmap(unsigned long addr, unsigned long len, # unsigned long prot, unsigned long flags, # unsigned long fd, unsigned long off) probe syscall.mmap = kernel.function("sys_mmap") ? { name = "mmap" start = $addr len = $len prot = $prot flags = $flags fd = $fd offset = $off argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $off) } probe syscall.mmap.return = kernel.function("sys_mmap").return ? { name = "mmap" retstr = returnstr(2) } # # sys32_mmap(struct mmap_arg_struct __user *arg) # probe syscall.mmap32 = kernel.function("sys32_mmap") { name = "mmap" argstr = get_mmap_args($arg) } probe syscall.mmap32.return = kernel.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) # The function is removed since 2.6.33 probe syscall.mmap2 = kernel.function("sys32_mmap2") ? { name = "mmap2" argstr = sprintf("%p, %d, %s, %s, %d, %d", $addr, $len, _mprotect_prot_str($prot), _mmap_flags($flags), $fd, $pgoff) } probe syscall.mmap2.return = kernel.function("sys32_mmap2").return ? { name = "mmap2" retstr = returnstr(2) } # vm86_warning _____________________________________________________ # # long sys32_vm86_warning(void) # probe syscall.vm86_warning = kernel.function("sys32_vm86_warning") { name = "vm86_warning" argstr = "" } probe syscall.vm86_warning.return = kernel.function("sys32_vm86_warning").return { name = "wm86_warning" retstr = returnstr(1) } # pipe _______________________________________________________ # # long sys32_pipe(int __user *fd) # Not available in newer kernels. probe syscall.pipe32 = kernel.function("sys32_pipe")? { name = "pipe" argstr = sprintf("%p", $fd) } probe syscall.pipe32.return = kernel.function("sys32_pipe").return? { name = "pipe" retstr = returnstr(1) }