~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/samples/kprobes/jprobe_example.c

Version: ~ [ linux-5.4-rc3 ] ~ [ linux-5.3.6 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.79 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.149 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.196 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.196 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.75 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Here's a sample kernel module showing the use of jprobes to dump
  3  * the arguments of _do_fork().
  4  *
  5  * For more information on theory of operation of jprobes, see
  6  * Documentation/kprobes.txt
  7  *
  8  * Build and insert the kernel module as done in the kprobe example.
  9  * You will see the trace data in /var/log/messages and on the
 10  * console whenever _do_fork() is invoked to create a new process.
 11  * (Some messages may be suppressed if syslogd is configured to
 12  * eliminate duplicate messages.)
 13  */
 14 
 15 #include <linux/kernel.h>
 16 #include <linux/module.h>
 17 #include <linux/kprobes.h>
 18 
 19 /*
 20  * Jumper probe for _do_fork.
 21  * Mirror principle enables access to arguments of the probed routine
 22  * from the probe handler.
 23  */
 24 
 25 /* Proxy routine having the same arguments as actual _do_fork() routine */
 26 static long j_do_fork(unsigned long clone_flags, unsigned long stack_start,
 27               unsigned long stack_size, int __user *parent_tidptr,
 28               int __user *child_tidptr, unsigned long tls)
 29 {
 30         pr_info("jprobe: clone_flags = 0x%lx, stack_start = 0x%lx "
 31                 "stack_size = 0x%lx\n", clone_flags, stack_start, stack_size);
 32 
 33         /* Always end with a call to jprobe_return(). */
 34         jprobe_return();
 35         return 0;
 36 }
 37 
 38 static struct jprobe my_jprobe = {
 39         .entry                  = j_do_fork,
 40         .kp = {
 41                 .symbol_name    = "_do_fork",
 42         },
 43 };
 44 
 45 static int __init jprobe_init(void)
 46 {
 47         int ret;
 48 
 49         ret = register_jprobe(&my_jprobe);
 50         if (ret < 0) {
 51                 pr_err("register_jprobe failed, returned %d\n", ret);
 52                 return -1;
 53         }
 54         pr_info("Planted jprobe at %p, handler addr %p\n",
 55                my_jprobe.kp.addr, my_jprobe.entry);
 56         return 0;
 57 }
 58 
 59 static void __exit jprobe_exit(void)
 60 {
 61         unregister_jprobe(&my_jprobe);
 62         pr_info("jprobe at %p unregistered\n", my_jprobe.kp.addr);
 63 }
 64 
 65 module_init(jprobe_init)
 66 module_exit(jprobe_exit)
 67 MODULE_LICENSE("GPL");
 68 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp