[Linux] Accéder dynamiquement à l'addresse d'une fonction statique

Accéder dynamiquement à l'addresse d'une fonction statique [Linux] - C - Programmation

Marsh Posté le 18-03-2011 à 11:12:14    

Je me demandais s'il était possible de trouver dynamiquement l'adresse d'une fonction liée statiquement dans un programme.
Un équivalent de dlsym(), mais sur le programme lui-même.

 

J'ai pas trouvé d'informations à ce sujet. J'imagine qu'il faut en fait récupérer le nom du programme, utiliser la libelf sur ce fichier, chercher le symbole et récupérer l'adresse.

 

Qu'en pensez vous ?  :??:


Message édité par sligor le 18-03-2011 à 14:13:14

---------------
qwerty-fr
Reply

Marsh Posté le 18-03-2011 à 11:12:14   

Reply

Marsh Posté le 18-03-2011 à 14:19:12    

Compiler le main avec les flags qui vont bien pour que dlsym() fonctionne dessus est aussi une piste.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 18-03-2011 à 15:36:12    

merci  :jap: ,  
 
en effet ça marche bien
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <dlfcn.h>
  4. int main(){
  5.   void *handle,*error;
  6.   if ((handle = dlopen (NULL, RTLD_NOW)) == NULL) {
  7.     fputs (dlerror(), stderr);
  8.     exit(1);
  9.   }
  10.   printf("main=%x\n",dlsym(handle,"main" ));
  11.   if ((error = dlerror()) != NULL)  {
  12.     fputs(error, stderr);
  13.     exit(1);
  14.   }
  15.   dlclose(handle);
  16.   return 0;
  17. }


 

Citation :


$gcc -g test.c -ldl -rdynamic
$./a.out
main=8049eb2


---------------
qwerty-fr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed