-
-
[求助]关于使用PTRACE_PEEKDATA搜索内存效率的疑问
-
发表于:
2014-4-16 10:54
10292
-
[求助]关于使用PTRACE_PEEKDATA搜索内存效率的疑问
void search_process_mem(long pid, long addr_begin, long addr_end, long value, long read_count)
{
char meminfo[128];
ptrace(PTRACE_ATTACH, pid, NULL, NULL) ;
waitpid(pid, NULL, 0);
long data = 0;
long addr = addr_begin;
int handle;
handle = fopen(MEM_INFO_FILE, "w");
if (handle != NULL){
for (; addr < addr_end; addr += read_count)
{
data = ptrace(PTRACE_PEEKDATA, pid, addr, NULL);
if (data == value){
snprintf(meminfo, sizeof(meminfo), "%x:%x", addr, data);
int realWrite = fputs(meminfo, handle);
}
}
}
ptrace(PTRACE_DETACH, pid, NULL, NULL);
waitpid(pid, NULL, 0);
fclose(handle);
}
贴代码,上面的代码用于搜索内存并输出到指定文件的,用八门神器搜40000000-42000000的内存只要1-2秒,用上面的代码搜内存要10多秒。
我试着打印了一下一小段搜索结果
40be1a40:40b5b548 0100 0000 1011 0101 1011 0101 0100 1000 4
40be1a44:4087f7fd 0100 0000 1000 0111 1111 0111 1111 1101 4
40be1a48:40be1978 0100 0000 1011 1110 0001 1001 0111 1000 4
40be1a4c:577c1f77 0101 0111 0111 1100 0001 1111 0111 0111 4
40be1a50:577e776c 0101 0111 0111 1110 0111 0111 0110 1100 4
40be1a54:18 0000 0000 0000 0000 0000 0000 0001 1000 1
40be1a58:40b469b8
40be1a5c:4087f7fd
40be1a60:40be1978
40be1a64:577cb54c
40be1a68:577e776c
40be1a6c:18
没能看出哪边可以优化的。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课