gpt4 book ai didi

windows - 为什么当 flAllocationType = MEM_RESERVE 时 VirtualAlloc() 需要 flProtect = PAGE_NOACCESS?

转载 作者:可可西里 更新时间:2023-11-01 11:26:39 26 4
gpt4 key购买 nike

以下对 VirtualAlloc() 的调用在 x64 上返回错误 ERROR_INVALID_PARAMETER:

LPVOID lp = VirtualAlloc(NULL, 0x10000000000, MEM_RESERVE, 0);

也就是说,我必须使用 PAGE_NOACCESS 作为 VirtualAlloc 的最后一个参数。但是当我查看 PAGE_NOACCESS here 的定义时,我发现:

Disables all access to the committed region of pages. An attempt to read from, write to, or execute the committed region results in an access violation.

这与在进程虚拟地址空间中保留地址范围无关。

似乎要求 flProtect 等于 PAGE_NOACCESS,当 flAllocationTime = MEM_RESERVE 时,是只是在 MS 文档中丢失了。有人可以证实这一点吗?

最佳答案

VirtualAlloc 的最后一个参数需要 memory protection constant .内存保护常量都不是 0,因此 0 不是有效值。这是您看到的 ERROR_INVALID_PARAMETER 错误。因此,您必须至少选择一个给定的常量。一种选择是使用 PAGE_NOACCESS

我承认,这在文档中不是很清楚,但一个普遍的事实是您不能假设 0 始终是任何标志参数的有效值;你总是需要检查你被允许给出的值。如果 0 是一个可接受的值,那么它将按原样列出或明确提及。

关于windows - 为什么当 flAllocationType = MEM_RESERVE 时 VirtualAlloc() 需要 flProtect = PAGE_NOACCESS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33594583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com