zoukankan      html  css  js  c++  java
  • 命令线程windbg之使用!list指令遍历双向链表

    废话就不多说了,开始。。。

        windows内核中大批的数据结构应用了双向表链。

        如果能查看个每表链的素元,甚是美哉。

        windbg就给我们供给了这么好用的功能。

        !list命令是一个用来查看表链的命令,该功能非常大强并且易于应用。

        上面我们就用例子来看一下!list命令的用法

        

    应用!list遍历活动进程的进程Id和进程名

        活动进程表链节点在EPROCESS中德移偏

    +0x088 ActiveProcessLinks : _LIST_ENTRY

        遍历活动进程列表

    lkd> !list -t nt!_LIST_ENTRY.FLink -e -x "dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88" nt!PsActiveProcessHead
    dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88 
       +0x084 UniqueProcessId : 0x8055d0c0 Void
       +0x174 ImageFileName   : [16]  "???"
    
    dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88 
       +0x084 UniqueProcessId : 0x00000004 Void
       +0x174 ImageFileName   : [16]  "System"
    
    dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88 
       +0x084 UniqueProcessId : 0x00000324 Void
       +0x174 ImageFileName   : [16]  "smss.exe"
    
    dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88 
       +0x084 UniqueProcessId : 0x00000388 Void
       +0x174 ImageFileName   : [16]  "csrss.exe"
    
    dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88 
       +0x084 UniqueProcessId : 0x000003a4 Void
       +0x174 ImageFileName   : [16]  "winlogon.exe"
    
    dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88 
       +0x084 UniqueProcessId : 0x000003d0 Void
       +0x174 ImageFileName   : [16]  "services.exe"
    
    dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88 
       +0x084 UniqueProcessId : 0x000003dc Void
       +0x174 ImageFileName   : [16]  "lsass.exe"
    dt nt!_eprocess UniqueProcessId ImageFileName @$extret-88 
       +0x084 UniqueProcessId : 0x00000e9c Void
       +0x174 ImageFileName   : [16]  "windbg.exe"

        

    应用!list 查看windbg.exe的线程列表

        先取获windbg.exe的EPROCESS的对象针指

    lkd> !process 0 0 windbg.exe
    PROCESS 893813c0  SessionId: 0  Cid: 0e9c    Peb: 7ffdc000  ParentCid: 0798
        DirBase: 09f60380  ObjectTable: e179f950  HandleCount:  87.
        Image: windbg.exe

        

    取获windbg.exe的线程列表

        线程表链在EPROCESS中德移偏:

    +0x190 ThreadListHead   : _LIST_ENTRY

        线程链节点在ETHread中德移偏:

    +0x22c ThreadListEntry  : _LIST_ENTRY

        查看线程列表

        每日一道理
    只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。
    lkd> !list -t nt!_LIST_ENTRY.FLink -x "dt nt!_ETHREAD Cid Cid. @$extret-0x22c" 893813c0+0x190
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : (null) 
          +0x004 UniqueThread : (null) 
    
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : 0x00000e9c Void
          +0x004 UniqueThread : 0x00000ea4 Void
    
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : 0x00000e9c Void
          +0x004 UniqueThread : 0x00000f38 Void
    
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : 0x00000e9c Void
          +0x004 UniqueThread : 0x00000a90 Void

        

    !list中处置多条命令

        如果要在-x面后的命令字符串中处置多条命令,请应用“”把!list命令参数括起来。

    lkd> !list "-t nt!_LIST_ENTRY.FLink  -x \"r @$t1=@$extret-0x22c; dt nt!_ETHREAD Cid Cid. @$t1; dt nt!_ETHREAD Win32StartAddress @$t1;\" 893813c0+0x190"
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : (null) 
          +0x004 UniqueThread : (null) 
       +0x228 Win32StartAddress : (null) 
    
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : 0x00000e9c Void
          +0x004 UniqueThread : 0x00000ea4 Void
       +0x228 Win32StartAddress : 0x01058c77 Void
    
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : 0x00000e9c Void
          +0x004 UniqueThread : 0x00000f38 Void
       +0x228 Win32StartAddress : 0x0102b590 Void
    
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : 0x00000e9c Void
          +0x004 UniqueThread : 0x00000bb4 Void
       +0x228 Win32StartAddress : (null)

        

    #CONTAINING_RECORD宏的应用

        由于@$extret-0x22c不直观,可以@@(#CONTAINING_RECORD(@$extret, nt!_ETHREAD, ThreadListEntry))来等价替换。

    lkd> !list -t nt!_LIST_ENTRY.FLink  -x "dt nt!_ETHREAD Cid Cid. @@(#CONTAINING_RECORD(@$extret, nt!_ETHREAD, ThreadListEntry))" 893813c0+0x190
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : (null) 
          +0x004 UniqueThread : (null) 
    
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : 0x00000e9c Void
          +0x004 UniqueThread : 0x00000ea4 Void
    
       +0x1ec Cid  : _CLIENT_ID
          +0x000 UniqueProcess : 0x00000e9c Void
          +0x004 UniqueThread : 0x00000f38 Void

        以上结果基于windows xp sp3 统系示展。

        转载请注明出处。ddlx studio。点点灵犀。 http://blog.csdn.net/sunyikuyu

        

        

        

        

        

    文章结束给大家分享下程序员的一些笑话语录: 雅虎最擅长的不是开通新业务,是关闭旧业务。

  • 相关阅读:
    linux学习资料收藏
    java 自动补全
    iframe
    XSLT 创建CDATA节点
    java 线程
    SQL(ORACLE)
    ubuntu下php无法载入mysql扩展
    Laravel 5.2 新特性系列 —— 多用户认证功能实现详解
    Windows环境下的NodeJS+NPM+Bower安装配置步骤
    关于Laravel 5 中 Html,Form 安装以及修改使用标签
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3049919.html
Copyright © 2011-2022 走看看