保护模式阶段测试

本文介绍了在保护模式下进行的安全测试,主要包括两道题目。第一题涉及编写一个函数,用于检查线性地址的PDE和PTE的有效性,通过判断P和R/W位来确保地址安全。第二题则考察了页的管理,通过申请单个页并利用调用门或中断门进行权限提升,将特定地址映射到物理页并进行遍历检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题

#include <cstdio>
#include <windows.h>
DWORD gPDE = 0;
DWORD gPTE = 0;
char segment[] = {
    0,0,0,0,0x48,0 };

一个获取线性地址PDE和PTE的裸函数,利用带一个参数的调用门

void _declspec(naked) _stdcall
MyReadMemory() {
   
	_asm {
   
		int 3
		mov ecx,[esp+8]
		push 0x30
		pop fs
		pushad
		pushfd
		xor eax,eax
		mov eax,ecx
		shr eax,0x14
		and eax,0xffc
		sub eax,0x3fd00000
		mov eax,[eax]
		mov gPDE,eax
		xor eax,eax
		mov eax,ecx
		shr eax,0xa
		and eax,0x3ffffc
		sub eax,0x40000000
		mov eax,[eax]
		mov gPTE,eax
		popfd
		popad
		retf 4
	}
}

题目函数实现,其实没什么难度,就是在拷贝内存前判断一下地址是否,无效地址直接提示后返回即可,判断依据是PDE和PTE的低2位有效位,即P位和R/W位

BOOL ReadVirtualMemory(PVOID lineaddr, PVOID outbuf, UINT32 size) {
   
	DWORD PageOffset = (DWORD)lineaddr & 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值