Доброго всем!
Пытаюсь сделать hook. На x86 все работает прекрасно, когда пытаюсь запустить это на mipsel - падает при вызове setsockopt_orig. В чем вообще могут быть грабли?
#define _GNU_SOURCE
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <sys/socket.h>
static void * wrapper_routine(void *);
/* Original setsockopt function */
static int (*setsockopt_orig)(int socket, int level, int option_name,
const void *option_value, socklen_t option_len) = NULL;
/* Library initialization function */
void wooinit(void) __attribute__((constructor));
void wooinit(void)
{
setsockopt_orig = dlsym(RTLD_NEXT, "setsockopt");
fprintf(stderr, "setsockopt: orig addr 0x%x\n", setsockopt_orig);
if(setsockopt_orig == NULL)
{
char *error = dlerror();
if(error == NULL)
{
error = "setsockopt is NULL";
}
fprintf(stderr, "%s\n", error);
exit(EXIT_FAILURE);
}
}
/* Our wrapper function for the real setsockopt() */
int setsockopt(int socket, int level, int option_name,
const void *option_value, socklen_t option_len)
{
int ret = 0;
fprintf(stderr, "setsockopt hook call\n");
if( setsockopt_orig != NULL )
{
ret = setsockopt_orig(socket, level, option_name, option_value, option_len);
}
fprintf(stderr, "setsockopt hook: ret %d\n", ret);
return ret;
}