[C++] 纯文本查看 复制代码
BOOL WINAPI VirtualProtect(
__in LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD flNewProtect,
__out PDWORD lpflOldProtect
);
[C++] 纯文本查看 复制代码
#include "stdafx.h"
#include <locale.h>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "CHS");
LPVOID lpStart = (LPVOID)0x10000000;
SIZE_T sizeVirtual = 8192;
DWORD dwOldProtect;
LPVOID lpAddress = VirtualAlloc(lpStart, sizeVirtual, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
if (lpAddress == NULL) {
printf ("VirtualAlloc Error : %d\n", GetLastError());
return (-1);
}
CopyMemory (lpAddress, TEXT("Hello Groad.net"), 2*_tcslen(TEXT("Hello Groad.net")));
_tprintf (TEXT("写入到内存空间的内容为:%s\n"), lpAddress);
_tprintf (TEXT("将内存属性更改为只读...并再次尝试写入\n"));
if (!VirtualProtect(lpAddress, 300, PAGE_READONLY, &dwOldProtect)) {
_tprintf (TEXT("VirtualProtect error : %d"), GetLastError());
return (-2);
}
//再次写入:
CopyMemory (lpAddress, TEXT("Hello Groad.net"), 2*_tcslen(TEXT("Hello Groad.net")));
[C++] 纯文本查看 复制代码
MEMORY_BASIC_INFORMATION mbi; // 内存信息
VirtualQuery(lpAddress, &mbi, sizeof(mbi));
_tprintf (TEXT( "BaseAddress: 0x%.8x\nAllocationBase: 0x%.8x\nAllocationProtect: 0x%.8x\nRegionSize: %u\nState: 0x%.8x\nProtect: 0x%.8x\nType: 0x%.8x\n"),
mbi.BaseAddress, mbi.AllocationBase, mbi.AllocationProtect, mbi.RegionSize, mbi.State, mbi.Protect, mbi.Type);