能力值:
( LV2,RANK:10 )
|
-
-
26 楼
支持一下,强烈支持!
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
我是初学者,有几个问题想请教:
RtlCopyMemory((PVOID)pInfo->nMemoryAddr,
pWrite, pInfo->nWriteSize);
这一句之前已经用cli指令禁止中断了,那么执行内存拷贝过程中产生的page fault怎么处理?
另外,改变cr3前后的pInfo->nMemoryAddr同一个值代表的含义已经是不一样的吧?
我看Reacos里NtReadVirtualMemory的实现,它会在改变cr3前先生成一个MDL,改变后从该MDL里重新映射一个虚拟地址,所以改变cr3前后虽然虚拟地址的含义已经不同,但指向的物理地址还是同一个,
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
.......
自己切CR3是相当危险的,当page fault发生过后,关闭被读写的进程会memory management!!!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
29 楼
精品绝对的好文章 +1
Mark
|
能力值:
( LV3,RANK:20 )
|
-
-
30 楼
多谢共享...
|
能力值:
(RANK:210 )
|
-
-
31 楼
又一个悲剧
太针对了.
|
能力值:
( LV2,RANK:10 )
|
-
-
32 楼
比较深,不适合我,看不懂
|
能力值:
( LV2,RANK:10 )
|
-
-
33 楼
写得不错,深入浅出,再怎么保护也不能对裸内存进行保护.
|
能力值:
( LV2,RANK:150 )
|
-
-
34 楼
很不错。。。我先膜拜,再学习
|
能力值:
( LV2,RANK:10 )
|
-
-
35 楼
虚地址转换物理地址也在你的代码中没体现啊,
ReadPageDirEntryXPAE没给出来代码来啊,
实际上在没开启PAE的情况下PDE存放的线性地址是在0xC0300000
开启后PDE存放的地址是0xC0600000,可以通过高11位当索引直接查找
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
支持!!!
辛苦
|
能力值:
( LV6,RANK:90 )
|
-
-
37 楼
源码里有阿!
|
能力值:
( LV6,RANK:90 )
|
-
-
38 楼
在R3代码中的OnBnClickedReadRing3 函数里实现了虚拟地址转换物理地址,
ReadPageDirEntryXPAE这组函数只是读取计算出的相关物理地址的内容,发帖时并没有将其贴出来,你可以去R3代码的源码里看看,
你说的没体现,应该另一种方法,直接切换CR3,读内存.而与这组ReadPageDirEntryXPAE相关的,是通过CR3的,转换虚拟地址到物理地址,读物理内存获得内容的.你再仔细看看源码.
|
能力值:
( LV12,RANK:220 )
|
-
-
39 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
果然大年。。顶。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
谁能给个调用的源码~
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
#pragma alloc_text(PAGE, DispatchDeviceControl))
代码是 paged code
但是却进行 关中断 切换CR3等操作,最有可能的蓝屏代码是 Irql XXXX 或者 Paged Code in Nonpaged Area之类的
WriteMemoryInfo *pInfo =
(WriteMemoryInfo *)ExAllocatePool(PagedPool, sizeof(WriteMemoryInfo));
同样在关中断时访问paged pool
另外用户态的地址空间是随时会失效的,不能随便读写
写的时候,关了中断,exception handler 没意义,该蓝屏的时候照样蓝屏
读的时候发生缺页可能不会蓝屏,但是如果这个虚拟地址已经释放掉了,会发生异常,CR3不会被恢复回来,最好的结果是用户态的非法操作。
还有比较有意思的是,假如你刚切换完CR3系统就调度其他线程了,回来后你读的是自己的地址空间。
另外从2003SP1开始貌似\\Device\\PhysicalMemory不再能从用户态用名称打开了
只能由内核态弄个handle给用户态,打开PhysicalMemory还要注意不要造成cache种类不一致
不过对映射到用户态的内存一般没什么问题
还有些问题比如没检查用户态提供的Buffer长度就访问
总之感觉问题不少,主要是同步和Paged/Nonpaged 方面的问题
可以试试弄个checked build 的windows 或者driver verifier
看看 :)
|
能力值:
( LV9,RANK:260 )
|
-
-
43 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
44 楼
虽然现在看不懂 但是我认为我一定会搞懂的
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
慢慢研究 先收藏了~~
我正开始做..就有成品咯·~感谢LZ
|
能力值:
( LV2,RANK:10 )
|
-
-
46 楼
顶楼主,看来科锐真不是盖的啊
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
很长,很长,对不起啊我看不懂。
|
能力值:
( LV2,RANK:10 )
|
-
-
48 楼
很强,支持源码附带
|
能力值:
( LV2,RANK:10 )
|
-
-
49 楼
狂暴膜拜中
|
能力值:
( LV2,RANK:10 )
|
-
-
50 楼
会蓝的,ethread中的eprocess没切过来
|
|
|