日期:2014-05-17  浏览次数:20935 次

请问,使用winhex如何找到一个进程的EPROCESS结构起始地址?
使用winhex如何找到一个进程的EPROCESS结构起始地址?
  事态紧急,希望得到高手帮助,谢谢……

------解决方案--------------------
每个进程都有一个 EPROCESS 结构,里面保存着进程的各种信息,和相关结构的指针。EPROCESS 结构位于系统地址空间,所以访问这个结构需要有ring0的权限。使用 Win2k DDK 的 KD (内核调试器)我们可以得到 EPROCESS 结构的定义。
http://blog.chinaunix.net/space.php?uid=20476365&do=blog&id=1942501
有点相似,但是没有解决楼主的问题
------解决方案--------------------
你在进程里确实可以找到EPROCESS结构,但你用winhex打开的是一个进程吗?恐怕你打开的是一个.EXE文件。如果你打开的是一个.EXE文件,那里面是没有这个结构的。只有当系统将.exe文件装入内存,需要执行的时候,才会由系统自己产生一个EPROCESS结构。这个EPROCESS结构式系统用来维护进程的,里面的内容相信楼主有些了解,比如,这个结构里面有一个processID,一个Exit status,你说,这个程序没有装入系统,那里来的这两个东西。所以,你用winhex调入.exe或者DLL文件,永远找不到这个结构,因为他根本就不存在。


------解决方案--------------------
另外,这个结构在系统的进程空间里面。在用户模式下,你无法看到这个结构,你只能操作你自己进程地址空间的东西,系统进程空间,由操作系统自己维护。当然,有的参数可以通过系统提供的函数设置。
------解决方案--------------------
在内核模式下,有一个函数,是IoGetCurrentProcess函数,会告诉你这个结构的指针,你获得了这个指针,就可以根据结构的情况,来看结构里面的内容了。

当然,要在内核模式下运行你的程序,你就只有写驱动程序了。然后在用户模式下,调用你的驱动程序,你想干什么都可以,用户模式告诉你写的驱动程序你想干什么,而具体工作则由内核模式的驱动程序完成,然后再将结果反馈给你写的用户模式下的程序。

大概就是这么个过程。

注意,这样得到的也只是你写的用户模式的那个进程的Peprocess的地址,其实意义也不大。