2015-08-09 2 views
1

J'utilise RTN_FindByName() pour rechercher un RTN spécifique, mais il ne fonctionne pas avec moi, d'ailleurs j'essaie de forcer le compilateur à ne pas inline le RTN, mais ne fonctionne toujours pas,
code de test:Comment trouver RTN par nom dans pintool?

void __attribute__ ((noinline)) MyFunInApp() 
{ 
    printf(" function inside application environmental \n"); 
} 
Code

dans pintool:

VOID ImageLoad(IMG img, VOID *v) 
{ 
    RTN MyRtn = RTN_FindByName(img,"MyFunInApp"); 
    if (RTN_Valid(MyRtn)) 
    { 
     cout<< "Found RTN"<< endl; 
    } 
    else 
    { 
     cout<< "Not Found RTN"<< endl; 
    } 
} 

Comment puis-je corriger cela, ou faire une autre façon?

compilateur: gcc version 4.8
du langage C++
OS: Ubuntu 14.04 LTS, 64 bits
sortie (de code de test):
non trouvé RTN
non trouvé RTN
Introuvable RTN

+0

Vous devez fournir plus de détails. Quel compilateur utilisez-vous? Quel système d'exploitation? Incluez la sortie complète de votre programme. – nitzanms

+0

@nitzanms, fait, je modifie la question. –

+0

Appelez-vous réellement la fonction dans votre code? – nitzanms

Répondre

2

Ce que vous voyez (le nom de la fonction entouré de caractères) est appelé nom de la fonction decoration/mangling. C'est ainsi que C++ implémente la surcharge nativement. Malheureusement, le mangling n'est pas standardisé et chaque compilateur le fait différemment.

Vous pouvez rechercher le nom altéré ou bien parcourir les RTN dans une image (vous pouvez voir des exemples dans le kit pour savoir comment faire) et utiliser l'API PIN_UndecorateSymbolName de Pin pour obtenir le nom de la fonction clean. Rappelez-vous simplement qu'en raison de mangling vous pouvez obtenir plus d'un tel symbole.

+0

Merci, je l'ai eu, mais pourquoi dans la sortie (du code de test) (Not Found RTN) répété trois fois, est-ce normal? –

+0

Notez que vous exécutez ce code pour chaque chargement d'image. Habituellement, il y aura plusieurs images chargées avec l'application, par exemple, le runtime C. – nitzanms

+0

BTW si vous avez trouvé ma réponse a résolu votre problème, pensez à l'accepter - cela vous donnera un coup de pouce de réputation, ce qui est toujours agréable. Cherchez le "V" gris sur la gauche. – nitzanms