题目1:

给定一个线性地址,和长度,读取内容:(运行环境XP)

目前:

可以修该页权限,获得PDE,PTE值,支持跨页检测,以及跨页设置页属性10-10-12)

后续:

补充读取内容 和 2-9-9-12分页模式,跨多页检测

题目要求:

int ReadMemory(OUT BYTE* buffer,IN DWORD dwAddr,IN DWORD dwLeght)要求:
1)可以自己指定分页方式.
2)页不存在,要提示,不能报错.
3)可以正确读取数据.

实现代码之前 务必使用windbg实现中断提权

kd> eq 8003f500 0040ee00`00081000

实现代码

//release版本 以及 项目属性中选固定基址
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
DWORD g_tmp=0,page_flag =0;
int flag = 0,pde = 0,pte = 0,ppte = 0;
DWORD dwAddr = 0,dwLeght= 0;
DWORD PDI,PTI,OFSET,PDI1,LPTE,LPPTE,LPDE;
//0x401000
void __declspec(naked)  ReadMemory() //蓝色字体是告诉编译器函数代码自己去写,不需要编译器添加任何汇编代码
{__asm{mov edx,g_tmpcmp edx,0je P1cmp edx,3je P2cmp edx,1je P2jmp P3P2:     mov ebx,ptemov ecx,pdeor ebx,4or ecx,4mov eax,LPTEmov dword ptr ds:[eax],ebx    mov eax,LPDEmov dword ptr ds:[eax],ecx  mov ecx,ppteor ecx,4mov eax,LPPTEmov dword ptr ds:[eax],ecx cmp edx,1je P1P3:       mov ebx,ptemov ecx,pdeor ebx,2or ecx,2mov eax,LPTEmov dword ptr ds:[eax],ebx    mov eax,LPDEmov dword ptr ds:[eax],ecxmov ecx,ppteor ecx,2mov eax,LPPTEmov dword ptr ds:[eax],ecx   P1://判断PDE是否为0mov eax,0xC0300000add eax,PDI1mov LPDE,eaxmov eax,dword ptr ds:[eax]cmp eax,0jne L1mov eax,3mov flag,eaxjmp L2L1://判断PTE是否为0mov pde,eaxmov eax,0xc0000000add eax,PDIadd eax,PTImov LPTE,eaxmov LPPTE,eaxmov eax,dword ptr ds:[eax]mov pte ,eaxmov eax,LPPTEadd eax,4mov LPPTE,eaxmov eax,dword ptr ds:[eax]mov ppte ,eaxL2:iretd}}void go()
{__asm int 0x20 //触发异常
}int main()
{int a = 0x123456;BYTE* buffer = a;//scanf("%d",&dwLeght);printf("自带常量线性地址:%p\n\n\n",&a);printf("请输入目标地址:\n");scanf("%x",&dwAddr);printf("请输入读取长度:\n");scanf("%x",&dwLeght);PDI = dwAddr>>22;PTI = (dwAddr<<10)>>22;OFSET = dwAddr&0x0FFF;if((dwLeght+OFSET)>=1024){printf("读取数据的跨页存储!\n");page_flag = 1;}printf("PDI:%x\n",PDI);printf("PTI:%x\n",PTI);printf("OFFSET:%x\n",OFSET);PDI1 = PDI*4;PDI*=0x1000;PTI*=4;if((DWORD)ReadMemory !=0x401000){printf("wrong addr:%p",ReadMemory);exit(-1);}
RNG:go();//产生20中断,触发我们塞入20中断地址的函数。if(pde == 0|| pte ==0){printf("该页未被挂载!");return 0;}printf("%p\n",&a);printf("PDE:%x\n",pde);printf("PTE:%x\n",pte);if(page_flag == 1 && ppte!=0){printf("下页PTE:%x\n",ppte);}else if(ppte == 0){printf("下页PTE为NULL,读取数据范围错误! exitting!");return 0;}printf("是否操作该物理页?\n");printf("1.yes     2.no\n");scanf("%d",&flag);if(flag == 2)return 1;else if(flag == 1){printf("1.增加普通用户操作权限 \n");printf("2.增加写权限\n");printf("3.成年人的选择!\n");scanf("%d",&g_tmp);goto RNG;}elseprintf("输入错误,exitting!.");}

题目2

2.申请长度为100的DWORD的数组,且每项用该项的地址初始化;把这个数组所在的物理页挂到0x1000的地址上;
定义一个指针,指向0x1000这个页里的数组所在的地址,用0x1000这个页的线性地址打印出这数组的值;

目前:

完成

后续:

题目要求:

要求:
数组所在的物理页,是同一个物理页;

windbg跟上面一样的 命令

实现代码

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<winbase.h>int pde = 0,pte = 0,g_tmp = 0;
DWORD dwAddr = 0,dwLeght= 0;
DWORD PDI,PTI,OFSET,PDI1;
//0x401000
void __declspec(naked)  ReadMemory() //蓝色字体是告诉编译器函数代码自己去写,不需要编译器添加任何汇编代码
{__asm{mov eax,0xc0300000add eax,PDI1mov eax,dword ptr ds:[eax]mov pde,eaxmov eax,0xC0000000add eax,PDIadd eax,PTImov eax,dword ptr ds:[eax]mov pte,eaxmov eax,0xC0300000mov ebx,pdemov dword ptr ds:[eax],ebxmov eax,0xc0000000add eax,0x4mov ebx,ptemov dword ptr ds:[eax],ebxiretd}}void go()
{__asm int 0x20 //触发异常
}int main()
{int i =0;DWORD *p1000=NULL;DWORD *str=NULL;DWORD dwAddr;if(&ReadMemory != 0x401000){printf("Error,ReadMemoryAddr:%p",&ReadMemory);}//固定大小申请空间,保证数组空间在同一物理页str = VirtualAlloc(0,1024,MEM_COMMIT,PAGE_EXECUTE_READWRITE);printf("当前数组线性地址:%p\n",str);//数组赋值for(i=0;i<100;i++){str[i] = &str[i];}//拆分线性地址dwAddr = str;PDI = dwAddr>>22;PTI = (dwAddr<<10)>>22;OFSET = dwAddr&0x0FFF;PDI1 = PDI*4;PDI*=0x1000;PTI*=4;printf("PDI:%p  PTI:%p  OFFSET:%p  \n",PDI,PTI,OFSET);go();printf("挂载完成! 输入任意数字 显示0x1000线性地址内容:\n");scanf("%d",&g_tmp);p1000 = 0x1000;for(i=0;i<100;i++){printf("%p  ",p1000[i]);}system("pause");return 1;
}

滴水内核中级班阶段测试题相关推荐

  1. c语言程序设计 滴水视频,编程达人滴水中级班视频教程

    Java视频教程详情描述: <编程达人滴水中级班视频教程>编程达人来了,N部视频教程让你成为真正的编程达人,融会贯通将是本套视频最大的目的. Java视频教程目录: ├─APC机制 │  ...

  2. C语言数组测试函数,(完整word版)C语言数组与函数阶段测试题答案---(20200807070313)(8页)-原创力文档...

    } } C语言数组与函数阶段测试题答案 一.选择题( 18*2=36 分) 1. 在定义" int a[5][6]; "后,第 11个元素是 [ C ] A.a[2][5] B . ...

  3. 计算机网络按信号频带占用方式分为,《计算机网络及组网技术》第2阶段测试题....

    <计算机网络及组网技术>第2阶段测试题 一.名词解释(每小题5分,共20分) 1.网络体系结构 2.通信协议 3.协议数据单元 4.路由选择 二.选择题(每小题1分,共46分) 1.早期的 ...

  4. 云班课计算机第二阶段测试卷,云班课测试题答案

    云班课测试题答案 更多相关问题 [单选] 秘书的接待工作应遵守以下原则,诚恳热情.讲究礼仪.周到细致.内外有别,确保安全和(). [单选] 电话按通话范围可分为(). [单选] 档案行政处罚的种类包括 ...

  5. “非IE内核浏览器”第一阶段开发计划发布

    "非IE内核浏览器"第一阶段开发计划发布     "非IE内核浏览器"开发计划第一阶段计划如下:         1.第一阶段目标:       技术选型,并实 ...

  6. 左神算法中级班第三课[C++代码]

    左神算法中级班第三课[C++代码] 第一题:流水线打包问题[阿里原题] 代码 第二题 代码 第三题:打印螺旋矩阵 代码 第四题 代码 第五题:判读aim是否在矩阵中 代码 第七题:topK问题 代码 ...

  7. an tu tu html5 test,法语TEF基础阶段测试题和答案(下)

    1. Elle emprunte régulièrement des livres à la_____ municipale. A. salle B. banque C.bibliothèque D. ...

  8. an tu tu html5 test,法语TEF基础阶段测试题和答案[下]

    1. Elle emprunte régulièrement des livres à la_____ municipale. A. salle B. banque C.bibliothèque D. ...

  9. 传智播客java就业班入学测试题(自测+答案)

    ---------------------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------------------- 传智播客java就业班入学测试题 ...

最新文章

  1. 凡科虚拟服务器怎样做301,虚拟主机301重定向怎么做?网站301重定向方法之一
  2. Python 爬取周杰伦instagram
  3. ABP VNext 微服务演示,项目状态和路线图
  4. 有关循环和判断的几个小问题
  5. 香农信息熵之可怜的小猪
  6. oracle数据库全数据库名,Oracle数据库中的 数据库域名、数据库名、全局数据库名、SID、数据库实例名、服务名 解释...
  7. c语言动态规划公共字符串,最长公共子串 C语言 动态规划
  8. 系统仿真平台SkyEye可替代国外Matlab/Sumlink等同类软件
  9. 开箱视频│ 能走!能跑!还能叠起来!金史密斯R1跑步机开箱
  10. iOS 5 Storyboard 学习之 Tabbar Controller,Navigation Controller
  11. Android之GPU过度绘制与图形渲染优化
  12. Java编程实现获取本机IP和计算机名的功能
  13. ThinkPad T470P拆机清灰教程
  14. SQL Server 数据库之数据约束
  15. 【Python K均值聚类算法】
  16. elasticsearch报错:exceeds the [index.highlight.max_analyzed_offset] limit [1000000]
  17. It is a distutils installed project and thus we cannot accurately determine [已解决]
  18. 天池- IJCAI-18 阿里妈妈搜索广告转化预测(完整版代码,数据集等总结)
  19. android 热更新 方案,与Android热更新方案Amigo的初次接触
  20. python 合并内容相同单元格

热门文章

  1. 关于 pygame中,检测按键按下
  2. 【正点原子FPGA连载】第三十一章RTC实时时钟数码管显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  3. python 自动识别图形验证码
  4. C语言小白(5)——结束语句
  5. 70. Climbing Stairs. Iter--Sol
  6. 蓝牙BQB认证 - HFP profile配置说明
  7. 离谱:火狐浏览器重启后插件,书签,浏览记录全部没了???
  8. 乐鑫Esp32学习之旅11 入门 乐鑫esp-adf 音频框架开发,造一个蓝牙耳机,实现切换歌曲,获取歌曲信息等功能。(附带Demo)
  9. \t\t工信部:要求对网站主办者身份信息当面核验
  10. linux openssl 编译错误,“致命错误:openssl/opensslv.h:没有这样的文件或目录”编译mitmproxy...