美文网首页
5.6 修改虚拟内存页面保护属性

5.6 修改虚拟内存页面保护属性

作者: f675b1a02698 | 来源:发表于2017-09-14 16:15 被阅读0次

    效果

    图1,可以看到内存属性已经修改为只读,保护值4变成了2.复制内容因为在修改前执行,所以正确执行

    图2,将复制代码移到修改保护属性代码后,弹出异常.这是在调试状态,如果在正常执行时则会显示如图3

    源码

    #include

    #include

    int main(int argc, PCHAR argv[]){

    SIZE_T sizeVirtual = 4000;//大小

    LPVOID lpRound = (LPVOID)0x100000FF;//地址

    MEMORY_BASIC_INFORMATION mbi;//内存信息

    //分配内存,直接分配已提交的内存

    LPVOID lpAddress = VirtualAlloc(lpRound, sizeVirtual, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);

    if (lpAddress == NULL){

    printf("分配虚拟内存失败: %d\n", GetLastError());

    return 1;

    }

    printf("分配成功: MEM_COMMIT | MEM_RESERVE 内存已从 空闲 提交为 已提交\n");

    //获取内存信息并打印

    VirtualQuery(lpAddress, &mbi, sizeof(mbi));

    printf("使用VirtualQuery函数获得的信息是;\n");

    printf("基址: 0x%.8x 分配基址: 0x%.8x\n", mbi.BaseAddress, mbi.AllocationBase);

    printf("分配保护: 0x%.8x 区域大小: 0x%.8x\n", mbi.AllocationProtect, mbi.RegionSize);

    printf("状态: 0x%.8x 保护: 0x%.8x 类型: 0x%.8x\n", mbi.State, mbi.Protect, mbi.Type);

    //修改内存保护属性 [这里修改了]

    printf("修改内存保护属性\n");

    if (!VirtualProtect(lpAddress, mbi.RegionSize, PAGE_READONLY, &mbi.Protect)){

    printf("修改保护属性失败: %d\n", GetLastError());

    return 1;

    }

    //复制数据到内存中 [这里执行会出错]

    CopyMemory(lpAddress, TEXT("misaka"), lstrlen(TEXT("misaka")));

    printf("复制成功,地址: 0x%x, 内容: %s\n", lpAddress, lpAddress);

    //获取内存信息并打印

    VirtualQuery(lpAddress, &mbi, sizeof(mbi));

    printf("使用VirtualQuery函数获得的信息是;\n");

    printf("基址: 0x%.8x 分配基址: 0x%.8x\n", mbi.BaseAddress, mbi.AllocationBase);

    printf("分配保护: 0x%.8x 区域大小: 0x%.8x\n", mbi.AllocationProtect, mbi.RegionSize);

    printf("状态: 0x%.8x 保护: 0x%.8x 类型: 0x%.8x\n", mbi.State, mbi.Protect, mbi.Type);

    //释放内存,将页面变为保留状态

    printf("释放内存,将页面变为保留状态 DECOMMIT\n");

    if (!VirtualFree(lpAddress, sizeVirtual, MEM_DECOMMIT)){

    printf("释放虚拟内存失败: %d\n", GetLastError());

    return 1;

    }

    getchar();

    return 0;

    }

    相关文章

      网友评论

          本文标题:5.6 修改虚拟内存页面保护属性

          本文链接:https://www.haomeiwen.com/subject/argqsxtx.html