Valgrind检查记忆,修补lackey

时间:2016-02-20 20:03:00

标签: valgrind instrumentation

我想修补valgrind的lackey示例工具。我想要 检查外观的仪表化二进制文件的内存 在存储指令的指针周围的某个字符串序列。 或者,扫描每个商店的所有内存区域以获得外观 这样的序列。有没有人知道足够的参考 例?基本上我想

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

但是如何验证[-8,8]范围内的ptr是否有效?在那儿 跟踪堆区域的函数?或者我每次都要跟踪/ proc / pid / maps?

// Konrad

1 个答案:

答案 0 :(得分:1)

事实证明,valgrind中的exp-dhat工具对我有用:

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 的出现,并在找到时打印堆栈跟踪......