我截取了write库函数来重定向写操作,但是只想对包装器uae进行一些写操作,而其他的(用于写套接字)应该转到原来的libc函数。我尝试过使用dlsym,但似乎没有效果。
我使用了LD-PRELOAD环境变量
会感激你的帮助
编辑:代码的一部分
int call_execute()
{
.....
static ssize_t (*real_write)(int,const void*,size_t) = NULL;
...
real_write= (size_t(*)(int,const void*,size_t)dlsym(RTLD_NEXT,"write");
...
real_write(sockfd,argcalls[i],strlen(argcalls[i]));
}发布于 2011-06-27 21:08:38
#include <unistd.h>
#include <stdio.h>
#include <dlfcn.h>
typedef ssize_t (*readf)(int, void *, size_t);
ssize_t
read(int fd, void *buf, size_t count) {
readf p = dlsym(RTLD_NEXT, "read");
printf("passing read with %d bytes\n", count);
return p(fd, buf, count);
}$gcc -W -Wall -shared -o /tmp/libpre.so test.c -ldl
$env LD_PRELOAD=/tmp/libpre.so cat /dev/null
上面的输出应该是这样的:
使用32768字节传递read
发布于 2014-02-17 17:29:12
如果dlsym(RTLD_NEXT, "write")没有返回libc函数,你可以显式地声明你想要的库,例如。
void *handle = dlopen("libc.so.6", RTLD_LAZY);
if (!handle) puts(dlerror()), exit(1);
typeof(&write) real_write = dlsym(handle, "write");https://stackoverflow.com/questions/6492828
复制相似问题