如何判断Windows中两个地址是否在同一页面?

时间:2013-03-13 04:22:05

标签: windows

具体来说,如果在不同的时间,我读取了ESP寄存器指向的地址(包含堆栈顶部地址),如何判断两个地址是否在同一页面?我相信这些地址是物理地址而不是虚拟地址,对吗?这两个读数可能来自不同的进程。 Windows如何进行页面分配?

补充:也许我明白了。因此,如果我们使用4KB页面,这是否意味着从0x ...... XXXX0000到0x ...... XXXX1000的地址在同一页面中?

1 个答案:

答案 0 :(得分:4)

你几乎是对的。这个想法很合理,但范围是0x????00000x????0FFF。如果您使用DWORD_PTRULONG_PTR,您还可以屏蔽低12位(ptr & 0xFFF)并比较您获得的两个指针值。 ULONG_PTRDWORD_PTR应该适用于x64和x86。

请记住,您的系统可能正在使用大页面。因此,请务必分别使用GetNativeSystemInfo和/或GetSystemInfo。您正在寻找dwAllocationGranularity结构中SYSTEM_INFO的价值。

所有这一切都在同一个进程内存空间

关于物理地址的问题:,我重复没有,用户模式进程会看到实际的物理地址,除非某些驱动程序或内核本身搞砸了。< / p>

假设您正在讨论DLL中的地址,则无法对以Vista及其ASLR功能开始的共享页面做出正确的假设。