Étant donné un nom de fichier et de fonction .so, existe-t-il un moyen simple de trouver la signature de la fonction via bash?Rechercher une signature de fonction sous Linux
exemple de retour:
@_ZN9CCSPlayer10SwitchTeamEi
Merci.
Étant donné un nom de fichier et de fonction .so, existe-t-il un moyen simple de trouver la signature de la fonction via bash?Rechercher une signature de fonction sous Linux
exemple de retour:
@_ZN9CCSPlayer10SwitchTeamEi
Merci.
Mon compilateur mutile les choses un peu différentes à la vôtre (OSX g ++) mais en changeant votre leader @ à un trait de soulignement et passer le résultat à C++ filt me donne le résultat que je pense que vous veulent:
bash> echo __ZN9CCSPlayer10SwitchTeamEi | c++filt
CCSPlayer::SwitchTeam(int)
faire l'inverse est plus délicat que CCSPlayer pourrait être un espace de noms ou d'une classe (et je soupçonne qu'ils sont mutilées différemment). Cependant, puisque vous avez la .donc vous pouvez le faire:
bash> nm library.so | c++filt | grep CCSPlayer::SwitchTeam
000ca120 S CCSPlayer::SwitchTeam
bash> nm library.so | grep 000ca120
000ca120 S __ZN9CCSPlayer10SwitchTeamEi
Bien que vous pourriez avoir besoin d'être un peu prudent à obtenir des résultats supplémentaires. (Il y a des symboles drôles dans ces fichiers .so parfois)
Essayez
strings <library.so>
nm -D library.so | grep FuncName
nm a un drapeau --demangle utile qui peut demangle votre .donc à la fois
nm --demangle library.so
Non, je veux que mon entrée être 'SwitchTeam' et sortir' @ _ZN9CCSPlayer10SwitchTeamEi' –
Mise à jour pour montrer comment vous pouvez faire l'inverse. –
Ou simplement 'C++ filt __ZN9CCSPlayer10SwitchTeamEi' – Potatoswatter