滴水中级班PTE作业-更改

为变量x再映射一个线性地址,并通过这个新的地址读取x的值

// PTEzuoye.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<windows.h>
int main() {
	SetThreadAffinityMask(GetCurrentThread(), 1);
	int x = 123;
	printf("x的值是%x\n", &x);
	 //现在申请一个内存将内存的最后三位改成和x的一样,因为最后寻找物理页的时候最后三位是重点
	//申请内存的函数VirtualAlloc,这个函数申请的内存是页对齐
	int p = (int)VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE);
	memset((int*)p, 0, 0x1000);
	//现在将P的线性地址最后3为2改成和x的一样,这里先用与操作将最后三位置于0
	p = p & 0xFFFFF000;
	//现在将p最后三位改成和x一样,那么首先我们先将x的最后三位取出来
	p = p | ((int) & x & 0x00000fff);//到这里就把p最后三位改成和x一样了
	//那么接下来就是更改pte,pte需要去windbg里面更改
	printf("新的线性地址p:%x\n", p);
	getchar();//这里更改pte

	//更改玩pte之后这里读取x的值
	printf("读取的x的值是:%x\n", *(int*)p);

	//这里还要利用新的线性地址进行x的写入
	*(int*)p = 123321;
	printf("新写入的x的值是:%x\n", x);
	getchar();
	VirtualFree((int*)p, 0x1000, MEM_DECOMMIT);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值