2016-09-05 1 views
1

J'effectue une tâche d'instrumentation simple sur un fichier exécutable et ses bibliothèques partagées connexes, en enregistrant toutes les instructions exécutées dans le fichier principal ainsi que les bibliothèques partagées.Broche: instrumentation d'une bibliothèque partagée spécifiée

Cependant, Pin toujours jeter

Pin is out of memory: MmapChecked 

Au cours de l'instrumentation. Comme je travaille sur un système 32 bits, chaque fois qu'il atteint la consommation de la mémoire 3G, le processus d'instrumentation va planter.

Je voudrais travailler sur ce système 32 bits, car il y a beaucoup de bibliothèques partagées sur cette plate-forme. D'autre part, parce que je ne m'intéresse qu'à une bibliothèque partagée, donc je pense à trouver un moyen d'enregistrer seulement les instructions exécutées dans l'exécutable principal ainsi que cette bibliothèque spéciale.

Cependant, je ne sais pas si/comment faire cela. En ce moment, avant de l'instrumentation, mon réglage est:

PIN_LockClient(); 
IMG img = IMG_FindByAddress(INS_Address(ins)); 
PIN_UnlockClient(); 

// if (IMG_Valid(img) && IMG_IsMainExecutable(img)){ 
if (IMG_Valid(img)) {   <--------------------- this line 
    INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)insCallBack, 
        IARG_BOOL, 
        IARG_ADDRINT, INS_Address(ins), 
        IARG_PTR, new string(INS_Disassemble(ins)), 
        IARG_CONTEXT, 
        IARG_ADDRINT, INS_NextAddress(ins), 
        IARG_END); 

} 

Comme vous pouvez le voir, je n'ai pas vérifié si je suis l'exécutable principal instrumentant ou non, ce qui signifie que je devrais être capable d'instrumenter toutes les bibliothèques.

Ma plate-forme de test est Ubuntu 14.04 32 bits x86. Et la cible de test est le code binaire ELF 32 bits.

Donc ma question est: étant donné ma situation, devrais-je configurer pour instrument seulement ma bibliothèque intéressée afin de surmonter l'exception de la mémoire? Si oui, comment puis-je faire cela?

+0

IIRC, les processus 32 bits peuvent utiliser l'espace d'adressage virtuel complet 4GiB s'ils s'exécutent sous un noyau 64 bits. Vous pouvez utiliser un noyau 64 bits avec un espace utilisateur 32 bits. (En particulier, une installation 32 bits d'Ubuntu devrait quand même démarrer si vous remplacez le noyau par un noyau 64 bits.) Ubuntu en a probablement même empaqueté un, mais j'oublie que 32 bits sont obsolètes depuis ~ 10 ans) –

Répondre

1

Utilisez IMG_Name pour obtenir le nom du fichier en tant que broche et le comparer à l'objet d'intérêt partagé. InstLib fournit une implémentation directe, mais c'est facile à faire par vous-même.