2016-02-20 9 views
1

Я хотел бы исправить пример инструмента лагги valgrind. Я хотел бы, чтобы рассмотрел память инструментального двоичного кода для появления определенной последовательности строк вокруг указателя инструкции хранилища. Альтернативно сканирование всех областей памяти в каждом хранилище для появления такой последовательности. Кто-нибудь знает ссылку на адекватный пример ? В принципе, я хотел быValgrind изучить память, исправление лакей

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

Но как я могу проверить, что ptr в диапазоне [-8,8] действительно? Есть функция - функция, которая отслеживает области кучи? Или мне приходится отслеживать/proc/pid/maps каждый раз?

// Konrad

ответ

1

Оказывается, что EXP-dhat инструменты в Valgrind работает для меня:

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); 
    } 
} 

Каждый раз, когда для записи Я ищу вхождение массива SearchFor и печать stacktrace, если найдено ...

 Смежные вопросы

  • Нет связанных вопросов^_^