Using LD_PRELOAD to make date return a specific date
tevans.uk at googlemail.com
Thu Apr 26 11:15:22 UTC 2007
On Tue, 2007-04-24 at 19:39 -0700, Kelly Jones wrote:
> I recently discovered LD_PRELOAD, a cool environment variable that
> lets a library "intercept" system calls. For example, setting
> LD_PRELOAD to /usr/lib/libtsocks.so lets tsocks intercept socket
> connections and redirect them to a SOCKS proxy.
> My question: how can I write a library that intercepts the
> gettimeofday() system call (or time() or whatever the 'date' command
> uses) and gets 'date' to return, say, "Thu Jan 1 00:00:00 UTC 1970"?
> I realize this involves a couple of steps (writing a C "library" for
> one), so any pointers are appreciated. My real intentions are more
> complex (and sinister <G>).
It's quite straightforward. /bin/date actually uses localtime(), not
gettimeofday(), but the principle is the same.
> $ cat localtime_hack.c
struct tm *
localtime(const time_t *clock)
static struct tm tv;
time_t epochal = 1;
> $ gcc -Wall -fpic -c -o localtime_hack.o localtime_hack.c
> $ gcc -shared -Wl,-soname,localtime_hack.so.1 -o \
> $ LD_PRELOAD="`pwd`/liblocaltime_hack.so.1.0" /bin/date
Thu 1 Jan 1970 01:00:01 BST
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Size: 187 bytes
Desc: This is a digitally signed message part
Url : http://lists.freebsd.org/pipermail/freebsd-questions/attachments/20070426/08cde0db/attachment.pgp
More information about the freebsd-questions