社区
进程/线程/DLL
帖子详情
如何确定一个进程的地址空间的有效地址?
ljseven
2004-06-17 10:26:02
我需要确定一个进程的有效地址空间,现在已经排除了系统模块(也就是系统DLL)的地址,但是没法更加准确的判断那些commit的地址空间是有用的,请高手不吝赐教!!!!
...全文
145
17
打赏
收藏
如何确定一个进程的地址空间的有效地址?
我需要确定一个进程的有效地址空间,现在已经排除了系统模块(也就是系统DLL)的地址,但是没法更加准确的判断那些commit的地址空间是有用的,请高手不吝赐教!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ljseven
2004-06-17
打赏
举报
回复
有没有知道的啊,我急急急啊
ljseven
2004-06-17
打赏
举报
回复
谢谢,关于驱动我还要看看资料,结贴了
会思考的草
2004-06-17
打赏
举报
回复
给你一个例子,这上面把我要讲的都讲完了:)呵呵。http://jiurl.nease.net/document/JiurlPlayWin2k/MmPfnDataBase.htm
会思考的草
2004-06-17
打赏
举报
回复
呵呵,其实也不是很难,和写DLL几乎一模一样。
会思考的草
2004-06-17
打赏
举报
回复
其实写驱动只是为了进入特权级别,这些重要的数据结构都在内核地址空间内,从用户态是不能访问的。
至于怎么写驱动……天那,太复杂了,你自己去找个把例子see see吧。
会思考的草
2004-06-17
打赏
举报
回复
表头定义:
typedef struct PageListHead
{
DWORD NumberOfPagesInList,
DWORD TypeOfList,
DWORD FirstPage,
DWORD LastPage
}PageListHead_t;
PFD中每个表项是一个结构体:
typedef struct PfdEntry
{
DWORD NextPage,
void *PteEntry/*PpteEntry,
DWORD PrevPage,
DWORD PteReferenceCount,
void *OriginalPte,
DWORD Flags;
}PfdEntry_t;
ljseven
2004-06-17
打赏
举报
回复
有没有例子,我没有作过驱动,不知道如何下手
会思考的草
2004-06-17
打赏
举报
回复
唔……这样,原来你想得到dirty但是废弃的页……
我想不写驱动是不可能的,这些结构是os 虚拟内存管理器非常重要的结构,windows不可能把这些东西放到用户地址空间去。
你可以试试读取页帧数据库(Page Frame Database ,PFD),这是一个数组,每个元素24个byte,保存已经装入物理内存的页面信息。因为物理内存中的页面有6中可能属性,所有有6个变量分别指向,构成一个双向链表:
MmStandbyPageListHead
MmModifiedNoWritePageListHead
MmModifiedPageListHead
MmFreePageListHead
MmBadPageListHead
MmZeroedPageListHead
ljseven
2004-06-17
打赏
举报
回复
在确定进程空间的时候我就用了他,关键的是这些提交的内存页有些是系统已经废弃的,我怎么样确定它
会思考的草
2004-06-17
打赏
举报
回复
The VirtualQueryEx function provides information about a range of pages within the virtual address space of a specified process.
会思考的草
2004-06-17
打赏
举报
回复
试试VitualQueryEx
薛定谔之死猫
2004-06-17
打赏
举报
回复
学习一下先
ljseven
2004-06-17
打赏
举报
回复
to codewarrior(会思考的草)
有没有简单一点的办法?
ljseven
2004-06-17
打赏
举报
回复
我指的是已经提交了的页面,有些提交的物理页面是已经用过的,但是已经没有有用的数据的页面.具体的来说一个进程大概有4g的空间除去保留的和内核用的大概2g,这2g的空间有的是保留有的是提交了的,提交的页面中就有已经用过的数据但是已经被用户舍弃打的.
会思考的草
2004-06-17
打赏
举报
回复
不过还是不清楚你说的“有用的”是什么意思?指已经装入物理内存的页吗?
会思考的草
2004-06-17
打赏
举报
回复
写驱动,或者通过安装callgate,进入ring0,dump进程的页表目录。检查每个表项的LSB位(Least Significant Bit)。 只有LSB位被置为1时,表项指向的页表才是有效的。
ljseven
2004-06-17
打赏
举报
回复
拜托了,各位,99我吧
Windows内核-内存管理
- 每个
进程
都有4GB的空间,但是这4GB空间并不是都在使用,有没有
一个
地方在记录着哪些
地址
空间
已经使用了,哪些没有使用? - 肯定有
一个
地方在记录 - 怎么记录线性
地址
是否是可以用的?  ...
Linux——
进程
地址
空间
进程
地址
空间
的产生当程序运行时,操作系统不仅将文件加载进
进程
、创建PCB结构体,还会创建
一个
mm_struct结构体。mm_struct结构体就是我们所谓的
进程
地址
空间
。我们在写代码时的那些所谓
地址
,其实都是mm_struct...
Linux
进程
地址
空间
(虚拟
地址
和物理
地址
的映射、页表)
在学习 C/C++ 的时候,我们知道内存会分为几个区域:栈区、堆区、全局/静态区、代码区、字符常量区 …这只是语言层面的理解,是远远不够的,如下空间布局图,请问这是物理内存吗?—— 不是,是
进程
地址
空间
。两点...
进程
的
地址
空间
一个
进程
包含的有代码和数据,以及操作系统所维护的相关数据结构,PCB模块,mm_struct,页表,MMU等 可以从下图中深入的理解
进程
的
地址
空间
首先说明一句话的,每个
进程
都认为自己是独享内存资源的!!! 每个...
进程
地址
空间
及 页表 详解
进程
地址
空间
:系统中每个用户...每个
进程
都有
一个
32位或64位的平坦
地址
空间
,空间大小取决于体系结构。(平坦指一段独立的连续区间) 内存
地址
是
一个
给定的值,要在
地址
空间
范围之内。 尽管
一个
进程
可以寻址4GB(2^...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章