LINUX.ORG.RU

[hook][mipsel]падает при вызове оригинального метода

 


0

2

Доброго всем!

Пытаюсь сделать 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;
}

★★
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.