QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: dafn

C++读物理内存

[复制链接]
发表于 2005-3-9 12:18:11 | 显示全部楼层
哦这样啊...
我当然也没有专门了解什么的...级别提升代码也比较简单..我用的是别人的代码.
只是觉得运行级别提升至少可以直接硬件操作.下次我试试看可不可以读取所有内存..或者其他的办法.这倒也是学习的机会,在兴趣中进步.
回复

使用道具 举报

发表于 2005-3-9 18:28:02 | 显示全部楼层
找到点很有用的.还没有试过.
转:希望对你有用

发信人: huyuguang (不再困惑), 信区: SysInternals WWW-POST
标  题: nt平台下,应用层上读写物理内存1
发信站: 武汉白云黄鹤站 (Mon Aug  7 09:56:09 2000) , 站内信件

一般来说,操作物理内存必须在核心态,如果要操作物理内存,必须写一个sys。
关于如何在核态下读写物理内存,到处都是sample,我就不废话了。
在这里,我们简单的回顾一下在nt的核心态下操作物理内存的方法,不管是
在核心态还是在用户态,都只能操作线性地址,要操作物理地址,首先必须
转化成线性地址,然后才能访问之。对于这个原理,请大家看看保护模式的
内存原理。之所以在应用层上难以访问物理地址,原因就在于1该物理地址没有
对应的选择子,2无法建立一个线性地址与其对应。
95下有一个mapphytoliner,linux下有vmap,这些系统调用得工作都是为这个物理
地址建立一个选择子,也即用一个线性地址与其对应。

但是关键是mapphytoliner(9x),mapviewofsection(nt)什么
的都要在核心态才能调用,所以我们才必须写一个sys,vxd什么的。

但是让我们欣喜的是,这几个系统服务虽然都是要在核心态才能调用,
但是用户态有这些服务相对应的函数,我们可以在用户态调用这些函数,
达到我们的目的。

不要在msdn里找,这个里面是没有的,这几个函数都是native api,说起到
nt平台下的api,一般人都立即想到了win32api,但是nt号称多头蛇操作系统,
除了支持win32,还有posix,os/2。这些api在进行系统调用的时候,多半要
都要和native api打交道,这个native api就是ntdll.dll输出的函数。native api
很有用,他不依赖于任何环境子系统。ms的这些函数都是不公开的,不过在
ddk里有很多系统服务和他对应,象ntcreatefile就和zwcreatefile对应。

在应用程序中如何使用ntdll.dll里输出的函数呢?现在我们用着vc6,
幸福的使用着动态连接库,很多人除了在settings->link->xx.lib之外,什么都不
会,不过这也不能怪他们,他们的时候一切都很方便了。但是我们现在找一本
讲述dll的书,一般都有动态加载得方法,我相信任何一本讲dll的书都会
讲这个方法,不过由于太不方便,我们很少去注意罢了。
为了使不知道得弟兄们不用回去再翻书,我在这简单的描述一下。
先定义一个指向函数的指针ntunmapviewofsection,然后...
        if( !(NtUnmapViewOfSection = (void *) GetProcAddress( GetModuleHandle("ntdll.dll"),
                        "NtUnmapViewOfSection" )) ) {

                return FALSE;
于是乎,这个指针就真的指向了那个函数的入口,于是我们就可以调用了。

要访问物理内存,必须输出这么几个函数:
RtlInitUnicodeString
NtUnmapViewOfSection
NtOpenSection
NtMapViewOfSection
RtlNtStatusToDosError
函数不多,而且在sys里访问过物理内存的弟兄们肯定会觉得眼熟,是的
这些native api和那些系统服务几乎是一样的,不同的是这些可以在用户
态调用。
下面的工作就和在核心态里访问物理内存一样了,前面我已经说过
这方面的例子到处都是,我就不多废话了。


附注:由于scz要我自暴其丑,本来我是无论如何也不答应的,
但是昨天我欠了scz一个情,只好回去翻了翻,发现了一个很早
做的一个东西,就贴上来了。

详细参看 :http://search.csdn.net/Expert/topic/511/511971.xml?temp=.1751215 不知道没注册用户能进去不. http://www.msdn.net/
回复

使用道具 举报

发表于 2005-3-9 18:54:20 | 显示全部楼层
我同学在windows里用wdm写了一个设备驱动程序。。。成功读写物理内存。。。不过写物理内存后。。。多半是蓝平了。。。。
我想linux里的模块应该也可以读写物理内存吧。。。不知道有没有牛人写过?
回复

使用道具 举报

发表于 2005-3-10 12:53:41 | 显示全部楼层
哈哈随便写物理内存当燃很容易就破坏系统数据,篮屏哦是吧?
不知道我页看看linux的,这样的兴趣学东西页快.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 13:56 , Processed in 0.041633 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表