2016-02-20 3 views
1

Je voudrais patcher l'outil d'exemple de valgrind. Je voudrais examiner la mémoire du binaire instrumenté pour l'apparence d'une certaine séquence de chaîne autour du pointeur d'une instruction de stockage. Vous pouvez également analyser toutes les zones de mémoire de chaque magasin pour l'apparition d'une telle séquence. Est-ce que quelqu'un sait une référence à un exemple adéquat? Fondamentalement, je voudraisValgrind examine la mémoire, patcher la clé

for (i = -8; i <= 8; i++) { 
    if (strncmp(ptr+i, "needle", 6) == 0) 
     printf("Here ip: %x\n", ip); 
} 

Mais comment puis-je vérifier que ptr dans la plage de [-8,8] est valide? Y at-il une fonction qui suit les régions de tas? Ou dois-je suivre/proc/pid/maps à chaque fois?

// Konrad

Répondre

1

Active que les outils exp-dhât dans valgrind fonctionne pour moi:

static VG_REGPARM(3) 
    void dh_handle_write (Addr addr, UWord szB) 
{ 
    Block* bk = find_Block_containing(addr); 
    if (bk) { 

    if (is_subinterval_of(bk->payload, bk->req_szB, addr-10, 10*2)) { 
     int i = 0; 
     for (i = -10; i <= 10; i++) { 
     if ((VG_(memcmp)(((char*)addr)+ i, searchfor, 6) == 0)) { 

      ExeContext *ec = VG_(record_ExeContext)(VG_(get_running_tid)(), 0); 
      VG_(pp_ExeContext) (ec); 
      VG_(printf)(" ---------------- ----------- found %08lx @ %08lx --------\n", addr, ip); 
     } 
     } 
    } 


     bk->n_writes += szB; 
     if (bk->histoW) 
     inc_histo_for_block(bk, addr, szB); 
    } 
} 

Chaque fois que pour une écriture que je cherche le occurance du tableau SearchFor et imprimer une stacktrace si trouvé ...