[PATCH v2 10/11] Uprobes samples.

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Srikar Dronamraju
Date: Wednesday, March 31, 2010 - 8:52 am

Uprobes Samples

This provides an example uprobes module in the samples directory.

To run this module run (as root)
 insmod uprobe_example.ko vaddr=<vaddr> pid=<pid>
	 Where <vaddr> is the address where we want to place the probe.
		<pid> is the pid of the process we are interested to probe.

 example: -
# cd samples/uprobes

[get the virtual address to place the probe.]
# vaddr=0x$(objdump -T /bin/bash |awk '/echo_builtin/ {print $1}')

[Run a bash shell in the background; have it echo 4 lines.]
# (sleep 10; echo 1; echo 2; echo 3; echo 4) &
[Probe calls echo_builtin() in the background bash process.]

# insmod uprobe_example.ko vaddr=$vaddr pid=$!
# sleep 10
# rmmod uprobe_example
# dmesg | tail -n 3
Registering uprobe on pid 10875, vaddr 0x45aa30
Unregistering uprobe on pid 10875, vaddr 0x45aa30
Probepoint was hit 4 times
#
[ Output shows that echo_builtin function was hit 4 times. ]

Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
---

 samples/Kconfig                  |    7 +++
 samples/uprobes/Makefile         |   17 ++++++++
 samples/uprobes/uprobe_example.c |   83 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 107 insertions(+), 0 deletions(-)
 create mode 100644 samples/uprobes/Makefile
 create mode 100644 samples/uprobes/uprobe_example.c


diff --git a/samples/Kconfig b/samples/Kconfig
index 8924f72..50b8b1c 100644
--- a/samples/Kconfig
+++ b/samples/Kconfig
@@ -44,4 +44,11 @@ config SAMPLE_HW_BREAKPOINT
 	help
 	  This builds kernel hardware breakpoint example modules.
 
+config SAMPLE_UPROBES
+	tristate "Build uprobes example -- loadable module only"
+	depends on UPROBES && m
+	help
+	  This builds uprobes example module.
+
+
 endif # SAMPLES
diff --git a/samples/uprobes/Makefile b/samples/uprobes/Makefile
new file mode 100644
index 0000000..f535f6f
--- /dev/null
+++ b/samples/uprobes/Makefile
@@ -0,0 +1,17 @@
+# builds the uprobes example kernel modules;
+# then to use one (as root):
+# insmod <module_name.ko> vaddr=<vaddr> pid=<pid>
+#
+#
+# example: -
+# vaddr=0x$(objdump -T /bin/bash |awk '/echo_builtin/ print $1}')
+# (sleep 10; echo 1; echo 2; echo 3; echo 4) &
+# insmod uprobe_example.ko vaddr=$vaddr pid=$!
+# sleep 10
+# rmmod uprobe_example
+# dmesg | tail -n 3
+#	Registering uprobe on pid 3920, vaddr 0x45aa30
+#	Unregistering uprobe on pid 3920, vaddr 0x45aa30
+#	Probepoint was hit 4 times
+
+obj-$(CONFIG_SAMPLE_UPROBES) += uprobe_example.o
diff --git a/samples/uprobes/uprobe_example.c b/samples/uprobes/uprobe_example.c
new file mode 100644
index 0000000..f625bae
--- /dev/null
+++ b/samples/uprobes/uprobe_example.c
@@ -0,0 +1,83 @@
+/*
+ * Uprobes Example
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Copyright (C) IBM Corporation, 2008-2010
+ * Authors:
+ *	Srikar Dronamraju
+ *	Jim Keniston
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/uprobes.h>
+
+/*
+ * Usage: insmod uprobe_example.ko pid=<pid> vaddr=<address> [verbose=0]
+ * where <pid> identifies the probed process and <address> is the virtual
+ * address of the probed instruction.
+ */
+
+static int pid;
+module_param(pid, int, 0);
+MODULE_PARM_DESC(pid, "pid");
+
+static int verbose;
+module_param(verbose, int, 0);
+MODULE_PARM_DESC(verbose, "verbose");
+
+static long vaddr;
+module_param(vaddr, long, 0);
+MODULE_PARM_DESC(vaddr, "vaddr");
+
+static int nhits;
+static struct uprobe usp;
+
+static void uprobe_handler(struct uprobe *u, struct pt_regs *regs)
+{
+	nhits++;
+	if (verbose)
+		printk(KERN_INFO "Hit #%d on probepoint at %#lx\n",
+			nhits, u->vaddr);
+}
+
+int __init init_module(void)
+{
+	int ret;
+	usp.pid = pid;
+	usp.vaddr = vaddr;
+	usp.handler = uprobe_handler;
+	printk(KERN_INFO "Registering uprobe on pid %d, vaddr %#lx\n",
+		usp.pid, usp.vaddr);
+	ret = register_uprobe(&usp);
+	if (ret != 0) {
+		printk(KERN_ERR "register_uprobe() failed, returned %d\n", ret);
+		printk(KERN_ERR "Usage: insmod uprobe_example.ko pid=<pid> "
+						"vaddr=<address>\n");
+		return ret;
+	}
+	return 0;
+}
+
+void __exit cleanup_module(void)
+{
+	printk(KERN_INFO "Unregistering uprobe on pid %d, vaddr %#lx\n",
+		usp.pid, usp.vaddr);
+	printk(KERN_INFO "Probepoint was hit %d times\n", nhits);
+	unregister_uprobe(&usp);
+}
+MODULE_LICENSE("GPL");
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH v2 0/11] Uprobes patches., Srikar Dronamraju, (Wed Mar 31, 8:51 am)
[PATCH v2 1/11] Move Macro W to insn.h, Srikar Dronamraju, (Wed Mar 31, 8:51 am)
[PATCH v2 2/11] Move replace_page() to mm/memory.c, Srikar Dronamraju, (Wed Mar 31, 8:51 am)
[PATCH v2 3/11] Enhance replace_page() to support pagecache, Srikar Dronamraju, (Wed Mar 31, 8:51 am)
[PATCH v2 4/11] User Space Breakpoint Assistance Layer, Srikar Dronamraju, (Wed Mar 31, 8:51 am)
[PATCH v2 5/11] X86 details for user space breakpoint assi ..., Srikar Dronamraju, (Wed Mar 31, 8:52 am)
[PATCH v2 6/11] Slot allocation for Execution out of line, Srikar Dronamraju, (Wed Mar 31, 8:52 am)
[PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Wed Mar 31, 8:52 am)
[PATCH v2 8/11] X86 details for uprobes., Srikar Dronamraju, (Wed Mar 31, 8:52 am)
[PATCH v2 9/11] Uprobes Documentation patch, Srikar Dronamraju, (Wed Mar 31, 8:52 am)
[PATCH v2 10/11] Uprobes samples., Srikar Dronamraju, (Wed Mar 31, 8:52 am)
[PATCH v2 11/11] Uprobes traceevents patch., Srikar Dronamraju, (Wed Mar 31, 8:53 am)
Re: [PATCH v2 11/11] Uprobes traceevents patch., Steven Rostedt, (Wed Mar 31, 2:24 pm)
Re: [PATCH v2 11/11] Uprobes traceevents patch., Masami Hiramatsu, (Wed Mar 31, 9:16 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Oleg Nesterov, (Tue Apr 13, 11:35 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Thu Apr 15, 2:35 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Oleg Nesterov, (Mon Apr 19, 12:31 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Tue Apr 20, 5:43 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Oleg Nesterov, (Tue Apr 20, 8:30 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Tue Apr 20, 11:59 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Oleg Nesterov, (Wed Apr 21, 9:05 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Thu Apr 22, 6:31 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Oleg Nesterov, (Thu Apr 22, 8:40 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Fri Apr 23, 7:58 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Oleg Nesterov, (Fri Apr 23, 11:53 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Peter Zijlstra, (Tue May 11, 1:32 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Peter Zijlstra, (Tue May 11, 1:43 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Peter Zijlstra, (Tue May 11, 1:44 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Peter Zijlstra, (Tue May 11, 1:45 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Peter Zijlstra, (Tue May 11, 1:47 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Frank Ch. Eigler, (Tue May 11, 1:57 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Peter Zijlstra, (Tue May 11, 2:01 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Wed May 12, 3:31 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Wed May 12, 3:41 am)
Re: [PATCH v2 11/11] Uprobes traceevents patch., Frederic Weisbecker, (Wed May 12, 4:02 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Peter Zijlstra, (Wed May 12, 4:12 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Wed May 12, 7:24 am)
Re: [PATCH v2 11/11] Uprobes traceevents patch., Srikar Dronamraju, (Wed May 12, 7:34 am)
Re: [PATCH v2 11/11] Uprobes traceevents patch., Frederic Weisbecker, (Wed May 12, 7:57 am)
Re: [PATCH v2 11/11] Uprobes traceevents patch., Frederic Weisbecker, (Wed May 12, 8:15 am)
Re: [PATCH v2 7/11] Uprobes Implementation, Oleg Nesterov, (Thu May 13, 12:40 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Linus Torvalds, (Thu May 13, 12:59 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Andi Kleen, (Thu May 13, 3:12 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Linus Torvalds, (Thu May 13, 3:25 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Roland McGrath, (Thu May 13, 5:56 pm)
Re: [PATCH v2 7/11] Uprobes Implementation, Srikar Dronamraju, (Thu May 13, 10:42 pm)