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

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: 0798DirBase: 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

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

转载于:https://www.cnblogs.com/jiangu66/archive/2013/04/28/3049919.html

命令线程windbg之使用!list指令遍历双向链表相关推荐

  1. Linux【命令篇】—— Linux操作系统常用指令大全

    目录 一.关机与重启指令 (1)shutdown - 关机 (2)halt - 关机 (3)reboot - 重启 (4)sync - 将内存的数据同步到磁盘 二.帮助指令 (1)man - 查看某个 ...

  2. 线程其实就是一个个指令组成的,当这个线程内的指令全部执行完了,那么这个线程也就执行结束了

    线程其实就是一个个指令组成的,当这个线程内的指令全部执行完了,那么这个线程也就执行结束了

  3. linux数据库能看到系统执行了哪些命令,DB2数据库在linux操作系统的指令有哪些?...

    以下的文章主要描述的是DB2数据库在linux操作系统下的相关指令,你如果对DB2数据库在linux操作系统下的相关指令有兴趣的话你就可以点击以下的文章进行观看了,以下就是文章的详细内容介绍,望大家借 ...

  4. java 命令 线程栈_JVM调试常用命令——jstack命令与Java线程栈(1)

    1 jstack 命令 jstack命令的主要作用是打印指定Java进程中每一个线程的工作状态,以及每个线程栈当前的方法执行顺序等详细情况.为什么jstack命令不和jmap.jinfo.jstat等 ...

  5. java执行cmd命令 cd_Windows的cmd中cd指令切换路径

    Windows的cmd中cd指令无法转换路径怎么办? 1,首先我们看看盘符,我的电脑里有 C D E盘. 2,按下WIN+R键 输入cmd,打开cmd窗口. 3,默认路径为用户文档路径,如果想切换到D ...

  6. python写cad命令_pyautocad 的一些简单操作指令

    最近一段时间在学习使用python控制autocad的一些简单指令 通过一些资料的查阅 整理了一些简单的命令及简单的绘图指令 基础设置 连接cad from pyautocad import Auto ...

  7. JAVA命令行运行、常用工具 指令

    JAVA常用工具 指令 *1.命令窗口的使用/常用指令 *javac *java *javap *2.更为方便的运行Java文件的powershell窗口 ====================== ...

  8. java中弹框命令_JAVA提权执行Windows指令

    1前言 **平台要求实现FTP账户同步.FTP账户同步分为两步,第一步将平台用户写入FTP服务器(FileZilla Server)配置文件中(Dom4J读写XML文件),第二部重启FTP服务(指令为 ...

  9. linux6.5 查看分辨率命令,centos6.5跟centos7的top命令中移动查看顺序的指令怎么不一样...

    top 命令 移动查看顺序 centos6.5 以下 top -ab -n 1 按o 按大写字母可以调顺序 大写字母往左 小写往右 f,o . Fields/Columns: 'f' add or r ...

最新文章

  1. 如何用OneNote分享长微博
  2. Spring学习8-Spring事务管理(AOP/声明式式事务管理)
  3. 基于傅里叶变换的音频重采样算法 (附完整c代码)
  4. 郑州学python_郑州Python基础知识点学习之内置类型
  5. 怎么用计算机发出音乐声,解决方案:计算机技巧-如何使显示器的内置扬声器发出声音...
  6. C语言的运算符的优先级与结合性+ASCII表
  7. java 执行顺序混乱_java类执行顺序问题
  8. 如何不重启服务,把编译类放入正在运行的服务中去
  9. java计算加速减速_java – 使用JOCL / OPENCL计算强度的加速总和
  10. 复数基础——例题_4
  11. 2020年副业推荐,介绍网络兼职的文章
  12. 解决docker下载安装速度慢的问题
  13. html5 3d 魔方旋转,【HTML5】3D模型--百行代码实现旋转立体魔方
  14. mysql gtidpurged_gtid环境下mysqldump对于set-gtid-purged的取值
  15. 变量修改器(modifier)
  16. eclipse:解决 The word is not correctly spelled问题
  17. 一加ace竞速版和一加9rt哪个值得买 两者配置对比
  18. iOS 14上全面屏iPhone的状态栏高度
  19. vscode底部蓝色导航不见了,vue less报错
  20. Centos7下搭建DMHS(源端oracle目的端达梦,另附目的端oracle)

热门文章

  1. 配置MA5626/5620-8/16/24 EPON/GPON/GE 交换机数据
  2. 【Python】基于 Flask 框架,模拟微信朋友圈的服务端
  3. 山区建小学 动态规划
  4. [Python爬虫]煎蛋网OOXX妹子图爬虫(1)——解密图片地址
  5. KVM halt-polling机制分析 1
  6. 虚拟服务器数据库安装与配置,虚拟服务器数据库安装与配置
  7. [b jni android,【Android NDK】(二)jni数据类型及其使用
  8. 【北亚数据恢复】异常断电导致linux服务器无法启动,数据库损坏的数据恢复
  9. docker exec执行多个命令详解
  10. 详解视觉BEV3D检测模型: Fast-BEV: A Fast and Strong Bird‘s-Eye View Perception Baseline