[PATCH v3 7/10] samples: Uprobes samples

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Srikar Dronamraju
Date: Thursday, May 6, 2010 - 11:03 am

samples.patch

From: Srikar Dronamraju <srikar@linux.vnet.ibm.com>

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/Makefile                 |    2 -
 samples/uprobes/Makefile         |   17 ++++++++
 samples/uprobes/uprobe_example.c |   83 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 108 insertions(+), 1 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/Makefile b/samples/Makefile
index 0f15e6d..c8fe6f9 100644
--- a/samples/Makefile
+++ b/samples/Makefile
@@ -1,4 +1,4 @@
 # Makefile for Linux samples code
 
 obj-$(CONFIG_SAMPLES)	+= kobject/ kprobes/ tracepoints/ trace_events/ \
-			   hw_breakpoint/
+			   hw_breakpoint/ uprobes/
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 v3 0/10] Uprobes v3, Srikar Dronamraju, (Thu May 6, 11:01 am)
[PATCH v3 1/10] X86 instruction analysis: Move Macro W to ..., Srikar Dronamraju, (Thu May 6, 11:01 am)
[PATCH v3 2/10] User Space Breakpoint Assistance Layer, Srikar Dronamraju, (Thu May 6, 11:02 am)
[PATCH v3 3/10] x86 support for User space breakpoint assi ..., Srikar Dronamraju, (Thu May 6, 11:02 am)
[PATCH v3 4/10] Slot allocation for execution out of line ..., Srikar Dronamraju, (Thu May 6, 11:02 am)
[PATCH v3 5/10] Uprobes Implementation, Srikar Dronamraju, (Thu May 6, 11:02 am)
[PATCH v3 6/10] x86 support for Uprobes, Srikar Dronamraju, (Thu May 6, 11:02 am)
[PATCH v3 7/10] samples: Uprobes samples, Srikar Dronamraju, (Thu May 6, 11:03 am)
[PATCH v3 8/10] Uprobes documentation., Srikar Dronamraju, (Thu May 6, 11:03 am)
[PATCH v3 9/10] trace: uprobes trace_event interface, Srikar Dronamraju, (Thu May 6, 11:03 am)
[PATCH v3 10/10] perf: perf interface for uprobes., Srikar Dronamraju, (Thu May 6, 11:03 am)
Re: [PATCH v3 10/10] perf: perf interface for uprobes., Masami Hiramatsu, (Thu May 6, 4:13 pm)
Re: [PATCH v3 10/10] perf: perf interface for uprobes., Srikar Dronamraju, (Thu May 6, 7:24 pm)
Re: [PATCH v3 10/10] perf: perf interface for uprobes., Masami Hiramatsu, (Fri May 7, 10:53 am)
Re: [PATCH v3 10/10] perf: perf interface for uprobes., Srikar Dronamraju, (Sun May 9, 4:18 am)
Re: [PATCH v3 0/10] Uprobes v3, Peter Zijlstra, (Tue May 11, 1:59 pm)
Re: [PATCH v3 0/10] Uprobes v3, Srikar Dronamraju, (Wed May 12, 3:25 am)
Re: [PATCH v3 0/10] Uprobes v3, Frederic Weisbecker, (Wed May 12, 3:38 am)
Re: [PATCH v3 0/10] Uprobes v3, Peter Zijlstra, (Wed May 12, 5:13 am)
Re: [PATCH v3 0/10] Uprobes v3, Ananth N Mavinakayan ..., (Wed May 12, 6:27 am)
Re: [PATCH v3 0/10] Uprobes v3, Peter Zijlstra, (Wed May 12, 6:39 am)
Re: [PATCH v3 0/10] Uprobes v3, Srikar Dronamraju, (Wed May 12, 6:39 am)
Re: [PATCH v3 0/10] Uprobes v3, Ananth N Mavinakayan ..., (Wed May 12, 7:04 am)
Re: [PATCH v3 0/10] Uprobes v3, Mathieu Desnoyers, (Wed May 12, 7:46 am)
Re: [PATCH v3 0/10] Uprobes v3, Frederic Weisbecker, (Wed May 12, 7:53 am)
Re: [PATCH v3 0/10] Uprobes v3, H. Peter Anvin, (Wed May 12, 9:55 am)
Re: [PATCH v3 0/10] Uprobes v3, Mathieu Desnoyers, (Wed May 12, 10:59 am)
Re: [PATCH v3 0/10] Uprobes v3, Srikar Dronamraju, (Thu May 13, 5:07 am)