Comment obtenir le nom de la fonction d’un pointeur de fonction C

J’ai le problème suivant: quand j’obtiens un backtrace en C en utilisant la fonction backtrace (3), les symboles retournés, le nom des fonctions est facilement déterminable avec la bibliothèque naine et dladdr (3).

Le problème est que si j’ai un pointeur de fonction simple (par exemple en le passant & function ), les fonctions dladdr + nain ne peuvent pas aider. Il semble que le pointeur soit différent de celui renvoyé par backtrace (3) (ce n’est pas étrange car backtrace obtient ces pointeurs de fonctions directement de la stack).

Ma question est de savoir s’il existe une méthode pour résoudre ces noms aussi? Aussi, je voudrais savoir exactement quelle est la différence entre les deux pointeurs.

Merci!

METTRE À JOUR:

La différence entre les pointeurs est assez importante:
Celui que j’obtiens avec backtrace est: 0x8048ca4
La version du pointeur direct: 0x3ba838

Il me semble que le second a besoin d’un décalage.

    En supposant les différences substantielles dans les adresses typiques que vous avez citées, l’une provient d’une bibliothèque partagée réelle, et l’autre de votre exécutable principal. En lisant entre les lignes d’une page de dladdr(3) pour dladdr(3) , il se peut que si le symbole n’est pas situé dans un module chargé par dlopen(3) il pourrait ne pas être capable de reconstruire le fichier correspondant et noms de symboles.

    Je suppose que vous n’avez pas retiré les symboles des modules qui vous intéressent ou que tous les paris sont désactivés. Si l’exécutable a des symboles, alors il devrait être possible d’y chercher un correspondant à l’adresse de n’importe quelle fonction nommable. Un pointeur sur une fonction est juste cela, après tout.

    addr2line (1) est peut-être ce que vous recherchez.