怎样得到Windows当前某一个任务(或进程)所占用的内存的地址区.(200分)

  • 主题发起人 主题发起人 ridle
  • 开始时间 开始时间
R

ridle

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样得到Windows当前某一个任务(或进程)所占用的内存的地址区.

比如说:当前Windows中有3个任务:
1、记事簿(NotePad.EXE)
2、IE4.0 (IExplore.EXE)
3、Delphi (DELPHI32.EXE)
我想做的是:得到“记事簿”(NOTEPAD.EXE)在物理内存中的位置。

谢指教! Email: jhj@990.net
 
; Windows采用虚拟内存的管理机制,所以一个应用程序的寻址范围达到2GB,就拿
你运行的NOTEPAD。EXE来说,你就无法知道是存储在内存中还是存储在硬盘上,系统
负责调度。
所以我认为你无法获得NOTEPAD在物理内存中的位置!
 
在Windows下,你只能是枉费心机了,本人也曾设法获得拨号窗口的地址,但都
无功而返,这里牵扯到如Windows的内存机制,地址映射表、页面保护等知识,如果
你了解Windows系统,恐怕对这些也不陌生吧!?
 
想得到内存的物理地址是比较困难的,
必须从GDT/LDT中读出段描述符,然后
读出页表,再根据页表翻译成物理地址.
由于GDL/LDT和页表都是OS的专属地,
要在具有足够安全性能的系统上取得
这些东西是很困难的.但是,对95/98
这样的糟糕系统,其实是可行的.DPMI
可以取得这些所有的数据.在NT下应该
有某种办法,因为M$总给自己留个后门.

其实,如果只是想读出程序运行时的数据,
可以很容易的.用Win32API的DebugAPI可
以干很多肮脏的事.关于DebugAPI本论坛
已经讨论过多次了,不想再写.
 
ridle:

这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者选择继续讨论或结束
问题。关于本版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。请提问者尽
可能自己处理自己的问题。这是您的权利,也是您的
义务。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部