⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiurl玩玩win2k进程线程篇 handle_table.htm

📁 关于win2000核心编程的文章
💻 HTM
📖 第 1 页 / 共 2 页
字号:
      00000028<BR>e3073940 00000000 0000001f 613c75c8 00020019<BR>e3073950 
      61325c28 00020019 630657e8 00020019<BR>e3073960 00000000 0000002d 00000000 
      0000002e<BR>...<BR>e3073fe0 00000000 000000fd 00000000 
      000000fe<BR>e3073ff0 00000000 000000ff 00000000 
      ffffffff<BR><BR><B>HANDLE_TABLE 链</B><BR><BR>在 Win2k Build 2195 中,所有进程(包括 
      Idle 进程 )的 HANDLE_TABLE 结构通过 HANDLE_TABLE 结构偏移 +54 处的 LIST_ENTRY 
      HandleTableList 链在一起。<BR><BR>+54 struct _LIST_ENTRY HandleTableList<BR>+54 
      struct _LIST_ENTRY *Flink<BR>+58 struct _LIST_ENTRY *Blink<BR><BR>通过全局变量 
      HandleTableListHead 可以找到这个链。<BR>对于 Win2k Build 2195 ,HandleTableListHead 
      地址为 8046a140,该地址开始处为一个 LIST_ENTRY 结构。<BR><BR>Win2k 中还有一个特殊的 HANDLE_TABLE 
      ,可以叫做 KernelHandleTable 。它不属于任何进程,也通过 HANDLE_TABLE 结构偏移 +54 处的 LIST_ENTRY 
      HandleTableList 链在 HANDLE_TABLE 链上。可以通过全局变量 ObpKernelHandleTable 找到它。对于 
      Win2k Build 2195 ,ObpKernelHandleTable 地址为 8046a694 ,是一个 HANDLE_TABLE 
      结构的指针。<BR><BR><BR><B>进程线程 HANDLE_TABLE</B> 
      <P>&nbsp;&nbsp;&nbsp; Win2k 中还有一个特殊的 HANDLE_TABLE,可以叫做 PspCidTable 。这个 
      HANDLE_TABLE 的句柄表中,保存着所有进程和线程对象的指针。PID(进程ID)和 
      ThreadID(线程ID)就是在这个句柄表中的索引。这个 HANDLE_TABLE 不属于任何进程,也没有链在 HANDLE_TABLE 
      链上。全局变量 PspCidTable 中是指向这个 HANDLE_TABLE 的指针。这个 HANDLE_TABLE 还有一点和别的 
      HANDLE_TABLE 都不同,就是它的 HANDLE_TABLE_ENTRY 中的第一个32bit 
      放着的是对象体指针(当然需要转换)而不是对象头指针(对象指针就是对象体指针)。<BR><BR>下面我们看实际的例子<BR><BR>// 
      PspCidTable 中是 HANDLE_TABLE 的地址<BR>kd&gt; dd PspCidTable l 1<BR>dd 
      PspCidTable l 1<BR>80469a28 81452228<BR><BR>kd&gt; !strct HANDLE_TABLE 
      81452228<BR>!strct HANDLE_TABLE 81452228<BR>struct _HANDLE_TABLE 
      (sizeof=108)<BR>+00 uint32 Flags = 00000000<BR>+04 int32 HandleCount = 
      000000d1<BR>+08 struct _HANDLE_TABLE_ENTRY ***Table = E1004000<BR>+0c 
      struct _EPROCESS *QuotaProcess = 00000000<BR>+10 void *UniqueProcessId = 
      00000000<BR>+14 int32 FirstFreeTableEntry = 0000008a<BR>+18 int32 
      NextIndexNeedingPool = 00000100<BR>+1c struct _ERESOURCE 
      HandleTableLock<BR>+1c struct _LIST_ENTRY SystemResourcesList<BR>+1c 
      struct _LIST_ENTRY *Flink = 80480020<BR>+20 struct _LIST_ENTRY *Blink = 
      814522E0<BR>+24 struct _OWNER_ENTRY *OwnerTable = 00000000<BR>+28 int16 
      ActiveCount = 0000<BR>+2a uint16 Flag = 0000<BR>+2c struct _KSEMAPHORE 
      *SharedWaiters = 00000000<BR>+30 struct _KEVENT *ExclusiveWaiters = 
      00000000<BR>+34 struct _OWNER_ENTRY OwnerThreads[2]<BR>+34 
      OwnerThreads[0]<BR>+34 uint32 OwnerThread = 00000000<BR>+38 int32 
      OwnerCount = 00000000<BR>+38 uint32 TableSize = 00000000<BR>+3c 
      OwnerThreads[1]<BR>+3c uint32 OwnerThread = 00000000<BR>+40 int32 
      OwnerCount = 00000000<BR>+40 uint32 TableSize = 00000000<BR>+44 uint32 
      ContentionCount = 00000000<BR>+48 uint16 NumberOfSharedWaiters = 
      0000<BR>+4a uint16 NumberOfExclusiveWaiters = 0000<BR>+4c void *Address = 
      00000000<BR>+4c uint32 CreatorBackTraceIndex = 00000000<BR>+50 uint32 
      SpinLock = 00000000<BR>+54 struct _LIST_ENTRY HandleTableList<BR>+54 
      struct _LIST_ENTRY *Flink = 8145227C<BR>+58 struct _LIST_ENTRY *Blink = 
      8145227C<BR>+5c struct _KEVENT HandleContentionEvent<BR>+5c struct 
      _DISPATCHER_HEADER Header<BR>+5c byte Type = 00 .<BR>+5d byte Absolute = 
      00 .<BR>+5e byte Size = 04 .<BR>+5f byte Inserted = 00 .<BR>+60 int32 
      SignalState = 00000000<BR>+64 struct _LIST_ENTRY WaitListHead<BR>+64 
      struct _LIST_ENTRY *Flink = 8145228C<BR>+68 struct _LIST_ENTRY *Blink = 
      8145228C<BR>// 句柄表的上层表地址为 E1004000<BR><BR>// 第0个中层表地址为 e1004400<BR>kd&gt; 
      dd E1004000 l 4<BR>dd E1004000 l 4<BR>e1004000 e1004400 00000000 00000000 
      00000000<BR>// 第0个中层表的第0个下层表地址为 e1004800<BR>kd&gt; dd E1004400 l 4<BR>dd 
      E1004400 l 4<BR>e1004400 e1004800 00000000 00000000 00000000<BR><BR>// 
      第0个中层表的第0个下层表的内容<BR>kd&gt; dd E1004800 l 200<BR>dd E1004800 l 
      200<BR>e1004800 00000000 00000001 0141eda0 00000000<BR>e1004810 0141e020 
      00000000 0141e7c0 00000000<BR>e1004820 0141e540 00000000 0141d020 
      00000000<BR>e1004830 0141dda0 00000000 0141db20 00000000<BR>e1004840 
      0141d8a0 00000000 0141d620 00000000<BR>e1004850 0141d3a0 00000000 0141c020 
      00000000<BR>e1004860 0141cda0 00000000 0141b4c0 00000000<BR>e1004870 
      0141b240 00000000 0141a020 00000000<BR>e1004880 0141ada0 00000000 0141a660 
      00000000<BR>e1004890 0141a3e0 00000000 01411020 00000000<BR>e10048a0 
      013f7240 00000000 013d1b80 00000000<BR>e10048b0 01421660 00000000 01350c20 
      00000000<BR>e10048c0 012a7b20 00000000 011017c0 00000000<BR>e10048d0 
      012a78a0 00000000 012663a0 00000000<BR>e10048e0 0114cda0 00000000 01101540 
      00000000<BR>e10048f0 011012c0 00000000 010fc020 00000000<BR>e1004900 
      02000000 00000000 010f7a60 00000000<BR>e1004910 010f7340 00000000 010f7760 
      00000000<BR>e1004920 010f6c00 00000000 010f6960 00000000<BR>e1004930 
      010e9860 00000000 010e9b00 00000000<BR>e1004940 010e9520 00000000 010cb020 
      00000000<BR>e1004950 010e8020 00000000 010ce220 00000000<BR>e1004960 
      010cc020 00000000 010ccce0 00000000<BR>e1004970 010cc9a0 00000000 010cc660 
      00000000<BR>e1004980 010ca020 00000000 010c2020 00000000<BR>e1004990 
      010c2b00 00000000 010c3340 00000000<BR>e10049a0 010c1020 00000000 01089700 
      00000000<BR>e10049b0 010c19c0 00000000 010c12c0 00000000<BR>e10049c0 
      02000000 00000000 010bf020 00000000<BR>e10049d0 010bd580 00000000 010bb980 
      00000000<BR>e10049e0 010bb2c0 00000000 010ba420 00000000<BR>e10049f0 
      010b9020 00000000 010b9d60 00000000<BR>e1004a00 039beae0 00000000 010b8c00 
      00000000<BR>e1004a10 01099020 00000000 010ae180 00000000<BR>e1004a20 
      010ac020 00000000 010acda0 00000000<BR>e1004a30 00000000 000000b5 043c2da0 
      00000000<BR>e1004a40 01090d80 00000000 010ab420 00000000<BR>e1004a50 
      03518a80 00000000 02fac920 00000000<BR>e1004a60 010aa020 00000000 010a9d40 
      00000000<BR>e1004a70 010a8740 00000000 06b02020 00000000<BR>e1004a80 
      02000000 00000000 00000000 000000b0<BR>e1004a90 010a5da0 00000000 010a4020 
      00000000<BR>e1004aa0 010a7b20 00000000 010a5b20 00000000<BR>e1004ab0 
      010a46e0 00000000 010a2d00 00000000<BR>e1004ac0 010a2a80 00000000 04859da0 
      00000000<BR>e1004ad0 0109f020 00000000 010a3900 00000000<BR>e1004ae0 
      0109e020 00000000 010a6d20 00000000<BR>e1004af0 0109c360 00000000 03518580 
      00000000<BR>e1004b00 01099da0 00000000 01097020 00000000<BR>e1004b10 
      010926c0 00000000 01092940 00000000<BR>e1004b20 03425c20 00000000 010915c0 
      00000000<BR>e1004b30 0108dc00 00000000 034aa860 00000000<BR>e1004b40 
      0108a020 00000000 0108cd00 00000000<BR>e1004b50 0108c020 00000000 0108b6c0 
      00000000<BR>e1004b60 01089020 00000000 0484e020 00000000<BR>e1004b70 
      047d6480 00000000 07b3f700 00000000<BR>e1004b80 01086020 00000000 05b1b020 
      00000000<BR>e1004b90 039bed60 00000000 05938cc0 00000000<BR>e1004ba0 
      01065940 00000000 01063580 00000000<BR>e1004bb0 0105cca0 00000000 0105a980 
      00000000<BR>e1004bc0 01059580 00000000 0105a320 00000000<BR>e1004bd0 
      043c2020 00000000 01056280 00000000<BR>e1004be0 047f8560 00000000 0639c1c0 
      00000000<BR>e1004bf0 03555340 00000000 02151940 00000000<BR>e1004c00 
      010555a0 00000000 01055820 00000000<BR>e1004c10 0104a700 00000000 01052b80 
      00000000<BR>e1004c20 05b9b480 00000000 0689f020 00000000<BR>e1004c30 
      01045a20 00000000 01042c20 00000000<BR>e1004c40 0767d800 00000000 069c3020 
      00000000<BR>e1004c50 0767d020 00000000 035007e0 00000000<BR>e1004c60 
      021a2680 00000000 022d6ac0 00000000<BR>e1004c70 01fac020 00000000 01089da0 
      00000000<BR>e1004c80 022fd020 00000000 022fdda0 00000000<BR>e1004c90 
      022fd320 00000000 022fd6e0 00000000<BR>e1004ca0 0243bda0 00000000 02000000 
      00000000<BR>e1004cb0 05938a40 00000000 027e4460 00000000<BR>e1004cc0 
      0104cb00 00000000 01c15860 00000000<BR>e1004cd0 0786d020 00000000 02b83560 
      00000000<BR>e1004ce0 02c305e0 00000000 0349e3e0 00000000<BR>e1004cf0 
      02daf020 00000000 02e0c740 00000000<BR>e1004d00 02def020 00000000 02ded760 
      00000000<BR>e1004d10 02eb9b20 00000000 02eb98a0 00000000<BR>e1004d20 
      010a3120 00000000 03309020 00000000<BR>e1004d30 06d00020 00000000 047fb7e0 
      00000000<BR>e1004d40 010cdaa0 00000000 0323c400 00000000<BR>e1004d50 
      019a5900 00000000 048217a0 00000000<BR>e1004d60 0489e2e0 00000000 02000000 
      00000000<BR>e1004d70 038fada0 00000000 01c153c0 00000000<BR>e1004d80 
      00000000 000000b8 0639cda0 00000000<BR>e1004d90 008bcda0 00000000 07a5d740 
      00000000<BR>e1004da0 0344c020 00000000 00000000 000000de<BR>e1004db0 
      02389380 00000000 0108a8e0 00000000<BR>e1004dc0 00000000 000000d0 03375020 
      00000000<BR>e1004dd0 034aace0 00000000 0767d300 00000000<BR>e1004de0 
      04029900 00000000 0712fda0 00000000<BR>e1004df0 06a594c0 00000000 01079da0 
      00000000<BR>e1004e00 035a4d60 00000000 04977340 00000000<BR>e1004e10 
      0786d600 00000000 009c46c0 00000000<BR>e1004e20 01eefbc0 00000000 03210520 
      00000000<BR>e1004e30 0788c020 00000000 035c3da0 00000000<BR>e1004e40 
      02000000 00000000 06b8db60 00000000<BR>e1004e50 0492dc80 00000000 063eada0 
      00000000<BR>e1004e60 00000000 000000da 035a43e0 00000000<BR>e1004e70 
      034e0020 00000000 019a5020 00000000<BR>e1004e80 00000000 000000cc 02eb9620 
      00000000<BR>e1004e90 034e03a0 00000000 04fdf4a0 00000000<BR>e1004ea0 
      0349f980 00000000 04a4ec20 00000000<BR>e1004eb0 00000000 000000e0 049e9020 
      00000000<BR>e1004ec0 00000000 000000d6 01055020 00000000<BR>e1004ed0 
      00000000 00000046 04029b80 00000000<BR>e1004ee0 00000000 000000df 00000000 
      000000dc<BR>e1004ef0 00000000 000000d8 00000000 000000e1<BR>e1004f00 
      00000000 000000dd 00000000 000000e2<BR>e1004f10 00000000 000000e3 00000000 
      000000e4<BR>e1004f20 00000000 000000e5 00000000 000000e6<BR>e1004f30 
      00000000 000000e7 00000000 000000e8<BR>e1004f40 00000000 000000e9 00000000 
      000000ea<BR>e1004f50 00000000 000000eb 00000000 000000ec<BR>e1004f60 
      00000000 000000ed 00000000 000000ee<BR>e1004f70 00000000 000000ef 00000000 
      000000f0<BR>e1004f80 00000000 000000f1 00000000 000000f2<BR>e1004f90 
      00000000 000000f3 00000000 000000f4<BR>e1004fa0 00000000 000000f5 00000000 
      000000f6<BR>e1004fb0 00000000 000000f7 00000000 000000f8<BR>e1004fc0 
      00000000 000000f9 00000000 000000fa<BR>e1004fd0 00000000 000000fb 00000000 
      000000fc<BR>e1004fe0 00000000 000000fd 00000000 000000fe<BR>e1004ff0 
      00000000 000000ff 00000000 ffffffff<BR><BR>// 
      PID为0x8的进程是System进程<BR>kd&gt; !process 8 0<BR>!process 8 0<BR>Searching 
      for Process with Cid == 8<BR>PROCESS 8141e020 SessionId: 0 Cid: 0008 Peb: 
      00000000 ParentCid: 0000<BR>DirBase: 00030000 ObjectTable: 81452a68 
      TableSize: 108.<BR>Image: System<BR><BR>下面我们要找 0x8 对应的对象<BR><BR>// 
      PID为0x8。0x8对应的上层表索引为0,中层表索引为0<BR>// 下层表中的偏移为 0x8*2。所以0x8对应的 
      HANDLE_TABLE_ENTRY 地址为 e1004800+8*2。<BR>kd&gt; dd e1004800+8*2 l 2<BR>dd 
      e1004800+8*2 l 2<BR>e1004810 0141e020 00000000<BR>// HANDLE_TABLE_ENTRY 
      中第一个32bit不空。<BR><BR>// 把 HANDLE_TABLE_ENTRY 第一个32bit转换成对象指针。<BR>// 
      低3bit本身是0,把最高位设为1。<BR>kd&gt; ? 0141e020+80000000<BR>? 
      0141e020+80000000<BR>Evaluate expression: -2126389216 = 8141e020<BR>// 
      注意这里转换得到的直接是对象指针(对象体指针)。<BR><BR>// 用 !object 命令获得这个对象的信息<BR>kd&gt; !object 
      8141e020<BR>!object 8141e020<BR>Object: 8141e020 Type: (814524e0) 
      Process<BR>ObjectHeader: 8141e008<BR>HandleCount: 2 PointerCount: 36<BR>// 
      是进程类型的对象,我们可以用 !process 命令获得这个进程的信息<BR><BR>kd&gt; !process 8141e020 
      0<BR>!process 8141e020 0<BR>PROCESS 8141e020 SessionId: 0 Cid: 0008 Peb: 
      00000000 ParentCid: 0000<BR>DirBase: 00030000 ObjectTable: 81452a68 
      TableSize: 108.<BR>Image: System<BR><BR>进程信息显示是 PID 为 8 的 System 
      进程。<BR>我们通过PID在 PspCidTable 中,找到了该PID的进程对象。<BR><BR>我们可以算出地址 e1004808 处的 
      HANDLE_TABLE_ENTRY 对应的句柄值为 0x4。<BR>我们看看 e1004808 处的 HANDLE_TABLE_ENTRY 
      找到的对象的句柄值(PID 或者 ThreadID)是否为0x4。<BR><BR>// 转换成对象指针<BR>kd&gt; ? 
      0141eda0+80000000<BR>? 0141eda0+80000000<BR>Evaluate expression: 
      -2126385760 = 8141eda0<BR><BR>// 用 !object 命令分析<BR>kd&gt; !object 
      8141eda0<BR>!object 8141eda0<BR>Object: 8141eda0 Type: (814523e0) 
      Thread<BR>ObjectHeader: 8141ed88<BR>HandleCount: 0 PointerCount: 3<BR>// 
      是一个 Thread 类型对象<BR><BR>// 用 !thread 命令分析<BR>kd&gt; !thread 8141eda0 
      0<BR>!thread 8141eda0 0<BR>THREAD 8141eda0 Cid 8.4 Teb: 00000000 
      Win32Thread: 00000000 WAIT<BR>// Cid 8.4 说明 ThreadID 为 0x4 。线程所在进程 PID 为 
      0x8 。 
      <P>  
      <P>欢迎交流,欢迎交朋友,<BR>欢迎访问 <A 
      href="http://jiurl.yeah.net/">http://jiurl.yeah.net/</A> <A 
      href="http://jiurl.cosoft.org.cn/forum">http://jiurl.cosoft.org.cn/forum</A> 

      <P>  
      <P>  
      <P>  
      <P>  
      <P>  </P></TD></TR></TBODY></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -