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.
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
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