已经获得了进程的PID , 怎么根据PID再获取这个程序的基地址
还有如果获得一个DLL文件的基地址呢
求帮助~~~

解决方案 »

  1.   

    转载网上一篇“如何获取用户进程全路径名”的文章进程监视器基本上写规矩了,但有点不爽的就是监视进程的名字中不能获得完整的路径,这对监视恶意进程很不好:知道它启动了,但是却不晓得它的执行文件在哪儿.于是在网上看了看关于这个内核获得用户进程的FullPath的讨论,确实有点另类,总结为6个步骤:
    1.IoGetCurrentProcess()取得当前进程的EPROCESS指针.
    2.在NT4.0和WIN2K中,首先取得EPROCESS中的SectionHandle,然后用ObReferenceObjectByHandle () 得到SectionObject的指针;在WinXp以上系统中可以直接在EPROCESS的结构中找到SectionObject指针.
    3.从SectionObject中获取SegmentObject.
    4.从SegmentObject中获取ControlArea.
    5.从ControlArea中获取FilePointer (这是一个FileObject指针).
    6.把FileObject作为第一个参数,调用ObQueryNameString(),返回填充OBJECT_NAME_INFORMATION结构:typedef struct _OBJECT_NAME_INFORMATION {
    UNICODE_STRING Name;
    } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;里面的UNICODE_STRING Name就是获得的进程执行文件完整路径.经验教训:所有代码都必须执行在该进程上下文(CONTEXT)中,IRQL为PASSIVE_LEVEL. 关键点是:
    1、CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID );
    2、调用Module32First、Module32Next获取dll信息 
      

  2.   

    可以通过pid,得到task_struct的首地址,然后通过这个函数就可以得到 
      

  3.   

    可以通过pid,得到task_struct的首地址,然后通过这个函数就可以得到