问题一: 本人在使用OpenProcess时得到的hProcess的值是按照4递增的,就算对同个pid调用也是这样,所以觉的OpenProcess取得的句柄是及时生成的而不是固定的值,是不是这样?
问题二:根据资料用 VirtualQueryEx 循环从0地址扫描内存,然后在上一次的循环后在
初地址上加上RegionSize再进行扫描:
DWORD ret=1;
DWORD add=0;
MEMORY_BASIC_INFORMATION mbi;while(ret)
{
ret=::VirtualQueryEx(hProcess,(LPCVOID)add,&mbi,
sizeof (::MEMORY_BASIC_INFORMATION));
add+=mbi.RegionSize;
}
发现变量add 的值由小变大再变小,知道是不够放的下累计的地址的值,就觉得奇怪,难道Windows不是32位地址吗?还是有其他用法!到底应该怎么扫描??
小弟用VB多时,现在改学VC,望各位高手指教。
问题二:根据资料用 VirtualQueryEx 循环从0地址扫描内存,然后在上一次的循环后在
初地址上加上RegionSize再进行扫描:
DWORD ret=1;
DWORD add=0;
MEMORY_BASIC_INFORMATION mbi;while(ret)
{
ret=::VirtualQueryEx(hProcess,(LPCVOID)add,&mbi,
sizeof (::MEMORY_BASIC_INFORMATION));
add+=mbi.RegionSize;
}
发现变量add 的值由小变大再变小,知道是不够放的下累计的地址的值,就觉得奇怪,难道Windows不是32位地址吗?还是有其他用法!到底应该怎么扫描??
小弟用VB多时,现在改学VC,望各位高手指教。
VirtualQueryEx返回的mbi里面,BaseAddress表示给定的地址所在的区域首址,
AllocationBase表示给定的地址所在的块的首址,一个区域包含若干个块,各区域是地址是连续的。块是保护属性相同的多个连续页组成的.
下一个区域的首址=上一个区域的首址+上一个区域的大小
区域的大小=区域各块的大小之和
有了上述算法,不难编出编历一个进程地址空间的程序.