J'essaye d'intercepter des appels de fonctions libpthred (POSIX) en utilisant la technique LD_PRELOAD. J'ai d'abord essayé de créer ma propre bibliothèque partagée ayant les mêmes noms de functin que dans la bibliothèque pthread. Voici un exemple de ma propre fonction pthread_create créée qui obtient d'abord l'adresse de la fonction pthread_create d'origine dans la bibliothèque pthread, puis elle appelle la fonction d'origine dans la bibliothèque pthread en utilisant le pointeur de fonction.Quelle est l'erreur dans mon programme?
#include <stdio.h>
#include <dlfcn.h>
#include <pthread.h>
int pthread_create (pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void*), void *arg)
{
int return_value;
static int (*fptr)() = 0;
printf("\n this is the test of LD_PRELOAD");
char *lError = dlerror();
if(fptr == 0)
{
fptr = (int (*)()) dlsym(RTLD_NEXT, "pthread_create");
if(fptr == 0)
{
(void) printf("Error dlopen: %s", dlerror());
return 0;
}
}
return (return_value);
}
J'ai essayé de le compiler ainsi:
g++ -fPIC -g -rdynamic -c -Wall ldtest.C -lrt -lpthread -ldl
Mais ses dons l'erreur suivante
ldtest.C:26: error: too many arguments to function
ligne 26 est cette ligne dans le programme. Est-ce que quelqu'un peut me dire quel est le problème ici Ou est-ce la bonne façon de le compiler?