2016-09-27 3 views
0

J'essaie de trouver le symbole connect dans le fichier libcrypto.so en utilisant dlsym() et je veux remplacer ce connect par ma méthode.Comment changer la valeur du pointeur de retour dlsym()

void * lib_orig_tols = dlopen(libcrypto.so, RTLD_GLOBAL); 

void * p_orig_connectOriginal; 
    p_orig_connectOriginal = (void*)dlsym(lib_orig_tols, "connect"); 

    if (p_orig_connectOriginal != NULL) 
     { 
     LOGI(" is not NULL"); 

     void *p_orig_connect = (void*)*((unsigned *)p_orig_connectOriginal); 

     *((unsigned *)p_orig_connectOriginal) = (unsigned)(my_crypto_connect); 
     } 


    int my_crypto_connect(int , const struct sockaddr , socklen_t){ 
     ** 
     *********** 
     *************** 
     ********** 
    } 

Mon mon application se est écrasé avec l'erreur
is not NULL

Fatal signal 11 (SIGSEGV), code 2, fault addr 0xb6e4755d in tid 7909

-ce que je fais quelque chose de mal.

+0

Pourquoi android est-il balisé? – Zarwan

+0

Veuillez corriger l'indentation de votre code. Vous devez utiliser des pointeurs de fonction. Un 'unsigned *' n'est pas un pointeur de fonction valide. – RedX

+0

1. Vous ne pouvez pas faire cela 2. Ce code n'a pas de sens même si vous pouviez le faire. – hobbs

Répondre

1

Eh bien, votre code est incomplet, il est plein d'erreurs syntaxiques, aussi contient typecasts faux (utiliser intptr_t)

De plus, il n'y a pas « connecter » à libcrypto.so. Choisissez-en un parmi ceux-ci:

BIO_CONNECT_free 
BIO_CONNECT_new 
BIO_new_connect 
BIO_s_connect 
+0

Je veux faire swizzling dans ce code.vous voulez changer le système SO fonction' connect' avec ma fonction 'connect' Donc, quand n'importe quel appel d'application que' connect' j'ai reçu l'appel Après une modification, j'appelle le SO 'connect' en utilisant le pointeur de fonction original – vinit

+0

Je ne comprends pas la partie" SO ", mais c'est parfaitement possible - bien sûr, vous n'êtes pas censé écraser le code de partage et d'autres non-sens Voici un examen ple: http://tsocks.sourceforge.net/ –