2015-11-01 4 views
0

J'ai essayé de itérer sur un des blocs de base dans une routine spécifique, mais je l'ai trouvé quelques problèmes:Comment puis-je itérer sur un bloc de base dans une routine spécifique dans intel pintool?

VOID Routine(RTN rtn, VOID *v) 
{ 
    RTN_Open(rtn) 
    for (BBL bbl = RTN_BblHead(rtn); BBL_Valid(bbl); bbl = BBL_Next(bbl)) 
    { /* some code */ } 
    RTN_Close(rtn); 
} 

erreur: Obsolète-déclarations,

Comment puis-je corriger cette erreur, ou le faire par un autre façon ?

+0

Etes-vous sûr que vos échecs proviennent de ce code? Avez-vous essayé d'exécuter un outil avec seulement ce code et toujours vu cet avertissement? – nitzanms

+0

Oui, j'ai essayé mais je n'ai pas changé. –

Répondre

2

Vous avez un avertissement deprecated-declarations car RTN_BblHead est maintenant obsolète. Utilisez RTN_InsHead à la place.

De include\pin\gen\image.ph:

/* DO NOT EDIT */ 
/* RTN_BblHead is now deprecated. See RTN_InsHead. 
*/ 
extern PIN_DEPRECATED_API BBL RTN_BblHead(RTN x); 

C'est également mentionné dans la documentation: RTN_BblHead

Vous pouvez également passer -Wno-deprecated-declarations à GCC pour supprimer cet avertissement.

Modifier

Rappelez-vous que PIN est avant tout un cadre DBI (instrumentation binaire dynamique): il est extrêmement bon quand il vient à l'instrument le flux de code exécuté, et moins bon quand il a besoin de briser non code exécuté.

instrumentation de routine permet à l'Pintool inspecter et instrument une routine entière lorsque l'image est contenue dans est d'abord chargé » mais comme les points de documentation:

A Pintool can walk the instructions of a routine. There is not enough information available to break the instructions into BBLs.

Pin trouvent les instructions d'un RTN par la découverte statique, donc Pin ne peut pas garantir qu'il trouvera toutes les instructions dans le RTN et ceci est encore plus difficile pour les BBL. Je suppose qu'ils ont essayé à un certain moment (d'où la disponibilité de RTN_BblHead dans le passé) pour fournir une découverte statique des BBLs mais le taux de découverte était trop faible (ou trop sujette aux erreurs) pour être jugé acceptable, donc la fonction est devenue obsolète. En bref, oui, vous avez besoin de trouver une instruction RTN par des instructions (sachant que la pin peut manquer certaines instructions car cela est fait statiquement). Vous ne pouvez découvrir les BBL d'une routine que si la routine est exécutée à un moment donné.

+0

Comment puis-je trouver des blocs de base à partir de RTN_InsHead, voulez-vous dire que je vérifie l'opcode de chaque instruction dans cette routine, ou y a-t-il d'autres façons de le faire? –

+0

@MosMoh Ajout d'une clarification sur la raison pour laquelle vous ne pouvez pas vraiment passer par les BBL d'un RTN. Vous devez passer par les INS. – Neitsa