Valgrind 检查内存,修补走狗
Valgrind examine memory, patching lackey
我想修补 valgrind 的走狗示例工具。我想
检查检测二进制文件的内存是否出现
存储指令指针周围的某个字符串序列。
或者扫描每个存储上的所有内存区域以查找外观
这样的序列。有谁知道适当的参考
例子?基本上我想
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?
//康拉德
原来 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 的出现,如果找到则打印堆栈跟踪...
我想修补 valgrind 的走狗示例工具。我想 检查检测二进制文件的内存是否出现 存储指令指针周围的某个字符串序列。 或者扫描每个存储上的所有内存区域以查找外观 这样的序列。有谁知道适当的参考 例子?基本上我想
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?
//康拉德
原来 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 的出现,如果找到则打印堆栈跟踪...