- 论坛徽章:
- 0
|
具体是这样的:
我在对libc内的一些库函数进行封装,在应用程序调用libc的库函数时先执行我自己的代码,然后再执行真正的库函数。
代码:
ssize_t recv(int socket, void *buffer, size_t length, int flags)//add my processiton
{
ssize_t (*old_recv)();//use to exec the real send
void* handle;//form dlsym
ssize_t result;
//add my procession
/*switch(state)
{
case:1
case:2
default:
}*/
printf("my recv\n");
handle = dlopen("/lib/libc.so.6",RTLD_LAZY);
if (!handle)
{
fprintf(stderr, "%s\n", dlerror());
exit(1);
}
old_recv = dlsym(handle,"recv");
result = old_recv(socket,buffer,length,flags);
dlclose(handle);
return result;
}
编译得到:my.so
使用时:p1@p1:~$ LD_PRELOAD=./my.so ./a.out
我现在想在使用时可以传递参数由my.so处理,比如:p1@p1:~$ LD_PRELOAD=./my.so ./a.out --parameters
parameters就可以传给state---(swtich中的)
现在一点思路都没有,各位帮忙提提思路?
[ 本帖最后由 reedwind 于 2009-4-3 17:00 编辑 ] |
|