首页
社区
课程
招聘
关于VirtualQueryEx这个API的使用,急切盼高手指点
2006-8-31 05:22 4839

关于VirtualQueryEx这个API的使用,急切盼高手指点

2006-8-31 05:22
4839
,我有个问题,就是关于VirtualQueryEx这个API的参数的和它的运行机制弄不懂,看了下MSDN也没明白过来。

其中lpAddress参数的英文说明没大看懂,是不是指从内存单元开始至最新的下一个页的边界?

另外MEMORY_BASIC_INFORMATION结构的baseaddress和AllocationBase这两个参数究竟有什么区别啊,望高手详细告知。我听说windows下页的大小都是4096字节啊,用getsysteminfo获得的dwPageSize参数来看是2000,而且看意思好像不同的操作系统还不一样。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 139
活跃值: (111)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
bookworm 3 2006-8-31 07:48
2
0
假定你想访问地址0x1234 5678。因为内存分页和硬件有关,你在安装操作系统的时候,它会据此安装对应的程序。
WinCE等小玩具: 2 KB
x86: 4 KB
AMD64/IA64: 8KB

假定你在x86上,则所在地址的页面起始地址是0x1234 5000,x64的机器则是0x1234 4000。

SIZE_T VirtualQueryEx(
  HANDLE hProcess,
  LPCVOID lpAddress,                   // == 0x12345000
  PMEMORY_BASIC_INFORMATION lpBuffer,
  SIZE_T dwLength
);

typedef struct _MEMORY_BASIC_INFORMATION {
  PVOID BaseAddress;
  PVOID AllocationBase;
  DWORD AllocationProtect;
  SIZE_T RegionSize;
  DWORD State;
  DWORD Protect;
  DWORD Type;
} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;

如果VirtualQueryEx的lpvAddress实在一个EXE或DLL中时,AllocationBase就是此EXE或DLL的基地址(ImageBase)。
游客
登录 | 注册 方可回帖
返回