2
我正在关注如何在C中制作内存扫描器的简单教程。由于某种原因,我的主循环从未发生过。C内存扫描器[无限循环]
下面是代码
MEMBLOCK* create_scan(unsigned int pid){
MEMBLOCK *mb_list = NULL;
MEMORY_BASIC_INFORMATION meminfo;
unsigned char *addr = 0;
HANDLE hProc = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pid);
if(hProc){
while(1){
// print the address for debug purpose
printf("%d \r\n", addr);
// loop should break out when the address overflows (return 0)
if(VirtualQueryEx (hProc, addr, &meminfo, sizeof(meminfo)) == 0){
break;
}
#define WRITABLE (PAGE_READWRITE | PAGE_WRITECOPY |PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY)
if ((meminfo.State & MEM_COMMIT) && (meminfo.Protect & WRITABLE)){
MEMBLOCK *mb = create_memblock (hProc, &meminfo);
if(mb){
mb->next = mb_list;
mb_list = mb;
}
}
addr = (unsigned char*)meminfo.BaseAddress + meminfo.RegionSize;
}
}
return mb_list;
}
出于某种原因,输出(printf的)这是
123863040
125943808
... until ...
2147418112
... all on the sudden ...
-1207959552
...
-243924992
0
65536
loop start again
任何想法,我有点迷路了!
如果地址太高,会产生错误否? 非常感谢我解释我的结果,至少我明白了奇怪的结果......我总是想知道人们是如何知道所有这些东西的。 –
谢谢,我使用SYSTEMINFO lpMaximumApplicationAddress打破了我的循环。欣赏它。 –