首页
论坛
课程
招聘
[求助]关于ZwAllocateVritualMemory这个函数的使用问题
2021-3-16 13:15 2618

[求助]关于ZwAllocateVritualMemory这个函数的使用问题

2021-3-16 13:15
2618

众所周知,这个函数用来处在一个进程上下文的内核层给一个进程的应用层分配内存的,说白了和在应用层的VritualAllocEX这个函数的功能差不多,只不过VritialAllocEx是在应用层使用的,这个是在内核使用的,函数原型如下:

NTSTATUS ZwAllocateVirtualMemory(

IN HANDLE  ProcessHandle,

IN OUT PVOID  *BaseAddress,

        IN ULONG  ZeroBits,

IN OUT PSIZE_T  RegionSize,

IN ULONG  AllocationType,

IN ULONG  Protect

);

第二参数用来指定要分配的内存的起始虚拟地址,也可以设置为NULL让操作系统自己指定起始的虚拟地址,但问题是当第二个参数指定为NULL的时候如果内存分配成功了如何知道分配的这块内存的虚拟地址呢????

返回值和6个参数没有一个是用来获取分配的内存的虚拟地址的,微软官方的开发文档也没说怎么获取分配的内存地址,很是不解,有知道的大佬给解答一下,感激不尽!


看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 5221
活跃值: 活跃值 (2881)
能力值: ( LV7,RANK:150 )
在线值:
发帖
回帖
粉丝
淡然他徒弟 活跃值 1 2021-3-16 13:26
2
1
uintptr_t baseaddress{0};// 此时baseaddress为0
ZwAllocateVirtualMemory(xx,&baseaddress,xx,xx,xx,xx)  
DbgPrint("[+]BaseAddresss:%llx\n",baseaddresss);//此时若ZwAllocateVirtualMemory调用成功 baseaddress就是申请内存成功后 返回的虚拟地址。
调用完以后 baseaddress的值会被改变
雪    币: 2940
活跃值: 活跃值 (2230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Mr.hack 活跃值 2021-3-16 16:06
3
0
淡然他徒弟 uintptr_t baseaddress{0};// 此时baseaddress为0 ZwAllocateVirtualMemory(xx,&baseaddress,xx,xx,xx,xx ...
感谢!!
游客
登录 | 注册 方可回帖
返回