2016-11-25 5 views
1

J'ai un programme simple qui appelle malloc, et j'essaie de développer un pintool pour attraper cet appel direct à malloc à partir de l'exécutable principal.Comment identifier les appels malloc à partir de l'exécutable principal

En utilisant malloctrace.cpp de SimpleExamples (est livré avec le SDK):

VOID Image(IMG img, VOID *v) 
{ 
    RTN mallocRtn = RTN_FindByName(img, MALLOC); 
    if (RTN_Valid(mallocRtn)) 
    { 
     RTN_Open(mallocRtn); 
     RTN_InsertCall(mallocRtn, IPOINT_BEFORE,(AFUNPTR)Arg1Before, IARG_ADDRINT, MALLOC, IARG_G_ARG0_CALLEE, IARG_END); 
     RTN_Close(mallocRtn); 
    } 
} 

Je suis attraper de nombreux appels malloc, à la fois orienté par mon propre code ou par les bibliothèques utilisées par celle-ci.

En utilisant objdump, je vois l'appel à malloc:

callq 4003b8 <[email protected]> 

qui commence par un malloc @ plt. En parcourant les routines dans mon exécutable principal, je vois une routine .plt, mais je ne peux pas dire si elle appartient à malloc ou à toute autre fonction externe.

J'apprécie votre aide.

+0

Quelle est exactement votre question? Si c'est «Est-ce que malloc @ plt appartient à l'implémentation de malloc?», La réponse est non. 'malloc @ plt' appartient au binaire effectuant l'appel. Il ** appelle ** l'implémentation de malloc depuis la libc une fois que la cible a été résolue par l'éditeur de runtime. – Neitsa

+0

Ma question est: comment puis-je attraper les appels malloc directement issus de mon code? (par opposition à tous les appels malloc, dont beaucoup venaient du code d'assistance tel que libc et etc.) – Jaaz

Répondre

0

Vous devrez ajouter des informations à votre rappel d'analyse sur la personne qui a appelé la fonction malloc(). La façon la plus simple de le faire est d'ajouter IARG_RETURN_IP à votre appel RTN_InsertCall() et de modifier Arg1Before en conséquence.

Ensuite, vous pouvez utiliser IMG_IsMainExecutable(IMG_FindByAddress(...)) sur l'adresse IP de retour dans Arg1Avant de voir si cet appel venait de l'exécutable principal.

+0

Merci pour ce commentaire utile! – Jaaz