首页
社区
课程
招聘
未解决 [求助]如何使用MEM_RESERVE类型的内存?
发表于: 2020-6-17 20:21 4750

未解决 [求助]如何使用MEM_RESERVE类型的内存?

2020-6-17 20:21
4750

尝试了 VirtualProtect 失败。

然后又尝试了 VirtualAlloc MEM_COMMIT|MEM_RESERVE 无效

然后又尝试了 VirtualAlloc MEM_RESERVE | MEM_PHYSICAL, PAGE_READWRITE 无效 getlasterror 487

百度google好像也没找到什么有效的方式,不知道有没有大佬研究过


尽管还是没发现什么好的解决方法,但是可以从另外一个方面来解决问题,就是调用NtWriteVirtualMemory,它并不检查内存可用性(也许)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-6-27 22:25 被萌克力编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 15
活跃值: (3546)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
MEM_RESERVE  预留的内存是没有物理页的,需要使用VirtualAlloc 再次在这里已预留的内存中申请 MEM_COMMIT属性,就可以使用了。
2020-6-17 22:40
0
雪    币: 433
活跃值: (1900)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
麻木的时间 MEM_RESERVE  预留的内存是没有物理页的,需要使用VirtualAlloc 再次在这里已预留的内存中申请 MEM_COMMIT属性,就可以使用了。

您好,我刚去测试了VirtualAlloc MEM_COMMIT,PAGE_READWRITE。 还是失败,错误代码是87。


这是测试代码,在确定state是MEM_RESERVE的情况下,VirtualProtect 和 VirtualAlloc都是同时失败的..

    MEMORY_BASIC_INFORMATION info;
    VirtualQuery((LPCVOID)nice, &info, sizeof(MEMORY_BASIC_INFORMATION));
    sprintf_s(tmpsay, "State:0x%x", info.State);
    std::cout << tmpsay << std::endl;

    if (!VirtualProtect((LPVOID)nice, 10, PAGE_READWRITE, &old)) {
        sprintf_s(tmpsay, "属性更改失败 错误代码:%d", GetLastError());
        std::cout << tmpsay << std::endl;
    }

    add = VirtualAlloc((LPVOID)nice, 10, MEM_COMMIT, PAGE_READWRITE);
    if (add == NULL) {
        sprintf_s(tmpsay, "申请失败 错误代码:%d", GetLastError());
        std::cout << tmpsay << std::endl;
    }


最后于 2020-6-18 22:45 被萌克力编辑 ,原因:
2020-6-18 22:42
0
雪    币: 433
活跃值: (1900)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
顶顶
2020-6-19 16:59
0
雪    币: 15
活跃值: (3546)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
857305819 加Q说
2020-6-20 05:39
0
雪    币: 433
活跃值: (1900)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
再顶顶
2020-6-20 23:42
0
雪    币: 88
活跃值: (90)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
顶顶顶
2020-8-30 03:12
0
游客
登录 | 注册 方可回帖
返回
//