VirtualAlloc可以取代VirtualProtect

时间:2017-04-07 05:42:05

标签: c windows

VirtualAlloc功能

保留,提交或更改调用进程的虚拟地址空间中页面区域的状态。此功能分配的内存自动初始化为零。

VirtualProtect功能

更改调用进程的虚拟地址空间中已提交页面区域的保护。 要更改任何进程的访问保护,请使用VirtualProtectEx函数。

如上所述(来自MSDN)说,VirtualAlloc还可以将提交页面的保护状态更改为VirtualProtect。所以我想知道VirtualArotoc是否可以被VirtualAlloc.Thanks取代。

以下是使用VirtualAlloc更改已提交页面的保护类型的示例。

LPVOID lpAddress = NULL;
SIZE_T dwSize = 0x40000;
DWORD flAllocationType = MEM_COMMIT;
DWORD flProtect = PAGE_READWRITE;
LPVOID newAddress;
newAddress = VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect);
if(newAddress == NULL)
{

    printf("error %d occurs\n", GetLastError());
    return -1;
}
printf("allocation address is %p\n", newAddress);
lpAddress = (LPVOID)((int)newAddress + 0x8000);
newAddress = VirtualAlloc(lpAddress, dwSize, flAllocationType, PAGE_EXECUTE_READWRITE);
if(newAddress == NULL)
{

    printf("error %d occurs\n", GetLastError());
    return -1;
}
printf("allocation address is %p\n", newAddress);
return 0;

0 个答案:

没有答案