KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I was playing around with LD_PRELOAD to intercept libc calls, it appears that the write call doesn't get intercepted with wc, though it does seem to work with cat. A stripped down version of the problem appears below. RedHat Linux 2.6.9-42.ELsmp Makefile writelib: gcc -Wall -rdynamic -fPIC -c write.c gcc -shared -Wl,-soname,libwrite.so -Wl,-export-dynamic -o libwrite.so write.o -ldl write.c: #include <stdio.h> #include <string.h> #ifndef __USE_GNU #define __USE_GNU #define __USE_GNU_DEFINED #endif #include <dlfcn.h> #ifdef __USE_GNU_DEFINED #undef __USE_GNU #undef __USE_GNU_DEFINED #endif #include <unistd.h> #include <stdlib.h> static ssize_t (*libc_write)(int fd, const void *buf, size_t len); ssize_t write(int fd, const void *buf, size_t len) { static int already; ssize_t ret; if (!already) { if ((libc_write = dlsym(RTLD_NEXT, "write")) == NULL) { exit(1); } already = 1; } ret = (*libc_write)(fd,"LD_PRELOAD\n",11); return len; // not ret so cat doesn't take forever } Output: prompt: make gcc -Wall -rdynamic -fPIC -c write.c gcc -shared -Wl,-soname,libwrite.so -Wl,-export-dynamic -o libwrite.so write.o -ldl prompt: LD_PRELOAD=./libwrite.so /bin/cat write.c LD_PRELOAD prompt: LD_PRELOAD=./libwrite.so /usr/bin/wc write.c 32 70 572 write.c Any explanations ?
Tags (comma-separated)
Save Edits
Cancel