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;