[Assorted-commits] SF.net SVN: assorted:[1061] sandbox/trunk/src/nix
Brought to you by:
yangzhang
From: <yan...@us...> - 2008-11-06 09:06:47
|
Revision: 1061 http://assorted.svn.sourceforge.net/assorted/?rev=1061&view=rev Author: yangzhang Date: 2008-11-06 09:06:41 +0000 (Thu, 06 Nov 2008) Log Message: ----------- added demo of LD_PRELOAD Added Paths: ----------- sandbox/trunk/src/nix/preload/ sandbox/trunk/src/nix/preload/interposer.c sandbox/trunk/src/nix/preload/run.bash sandbox/trunk/src/nix/preload/test.c sandbox/trunk/src/nix/preload/test.cc Added: sandbox/trunk/src/nix/preload/interposer.c =================================================================== --- sandbox/trunk/src/nix/preload/interposer.c (rev 0) +++ sandbox/trunk/src/nix/preload/interposer.c 2008-11-06 09:06:41 UTC (rev 1061) @@ -0,0 +1,30 @@ +#define _GNU_SOURCE +#include <stdio.h> +#include <dlfcn.h> + +void * +malloc(size_t sz) +{ + // Find and cache the next malloc (in our example it should be the "real" + // malloc). + static void * (*func)(); + if (!func) + func = (void *(*)()) dlsym(RTLD_NEXT, "malloc"); + + // Do our thang. +#ifdef VERBOSE + printf("malloc(%u) is called\n", sz); +#endif + + // Call real malloc. + void *p = func(sz); + + // Do our thang. +#ifdef VERBOSE + printf("malloc returned %p\n", p); +#endif + if (!p) + printf("malloc failed!\n"); + + return p; +} Added: sandbox/trunk/src/nix/preload/run.bash =================================================================== --- sandbox/trunk/src/nix/preload/run.bash (rev 0) +++ sandbox/trunk/src/nix/preload/run.bash 2008-11-06 09:06:41 UTC (rev 1061) @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -o errexit -o nounset + +gcc -Wall -o testc test.c +g++ -Wall -o testcc test.cc +gcc -Wall -shared -fPIC -ldl -o interposer.so interposer.c +LD_PRELOAD=./interposer.so ./testc +LD_PRELOAD=./interposer.so ./testcc || true Property changes on: sandbox/trunk/src/nix/preload/run.bash ___________________________________________________________________ Added: svn:executable + * Added: sandbox/trunk/src/nix/preload/test.c =================================================================== --- sandbox/trunk/src/nix/preload/test.c (rev 0) +++ sandbox/trunk/src/nix/preload/test.c 2008-11-06 09:06:41 UTC (rev 1061) @@ -0,0 +1,11 @@ +#include <stdlib.h> +#include <stdio.h> + +int +main() +{ + char *msg = (char*) malloc(16); + snprintf(msg, 16, "hello!\n"); + printf("%s", msg); + return 0; +} Added: sandbox/trunk/src/nix/preload/test.cc =================================================================== --- sandbox/trunk/src/nix/preload/test.cc (rev 0) +++ sandbox/trunk/src/nix/preload/test.cc 2008-11-06 09:06:41 UTC (rev 1061) @@ -0,0 +1,7 @@ +// Intentionally fail. + +int +main() { + operator new(-1); + return 0; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |