1
我有一个应用程序,我需要扫描内存中的某些数据类型。为了得到一些基准测试,我刮起了这个计划:C++内存扫描
long count = 0;
MEMORY_BASIC_INFORMATION meminfo;
unsigned char *addr = 0;
HANDLE hProc = GetCurrentProcess();
while (true){
if (VirtualQueryEx(hProc, addr, &meminfo, sizeof(meminfo)) == 0){
break;
}
if ((meminfo.State & MEM_COMMIT) && (meminfo.Protect & WRITABLE)){
addr = (unsigned char*)meminfo.BaseAddress + meminfo.RegionSize;
count++;
printf("%d",count);
}
}
printf("%ld\n",count);
这个程序不工作在第一内存块,它块/崩溃。从概念上讲,它也失败了,理想情况下我需要指向当前流程中的所有变量,所以我可以检查它们是否与我有任何关联。我已经谷歌了一段时间无济于事,如果有人能把我推向正确的方向,那会很棒。
我知道首先这样做通常是一个坏主意,我只想知道如果我需要这样做会怎样做。
可能只是用** **调试器可能是一个正确的方式),发现在程序B中的错误)执行任何类型的进程内存您希望通过您的程序实现的检查。另一方面,如果你只关心某种类型的基准测试,那么就有专门的工具,例如'gprof'。 – mikyra
当你说它在第一个内存块崩溃时,你的意思是什么?你的意思是说调用VirtualQueryEx时出现错误?如果是这样,错误代码是什么? (您可以通过调用[GetLastError](http://msdn.microsoft.com/en-us/library/windows/desktop/ms679360%28v=vs.85%29.aspx))来获取此信息。 –