命令线程windbg之使用!list指令遍历双向链表
2013-04-28 19:40
357 查看
废话就不多说了,开始。。。
windows内核中大批的数据结构应用了双向表链。
如果能查看个每表链的素元,甚是美哉。
windbg就给我们供给了这么好用的功能。
!list命令是一个用来查看表链的命令,该功能非常大强并且易于应用。
上面我们就用例子来看一下!list命令的用法
遍历活动进程列表
线程链节点在ETHread中德移偏:
查看线程列表
每日一道理
只有启程,才会到达理想和目的地,只有拼搏,才会获得辉煌的成功,只有播种,才会有收获。只有追求,才会品味堂堂正正的人。
以上结果基于windows xp sp3 统系示展。
转载请注明出处。ddlx studio。点点灵犀。 http://blog.csdn.net/sunyikuyu
文章结束给大家分享下程序员的一些笑话语录:
雅虎最擅长的不是开通新业务,是关闭旧业务。
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
文章结束给大家分享下程序员的一些笑话语录:
雅虎最擅长的不是开通新业务,是关闭旧业务。
相关文章推荐
- windbg之使用!list指令遍历双向链表
- 双向链表LinkedList使用
- 1109. Group Photo (25) -- C++ list(双向链表使用)
- C++/C++11中std::list双向链表的使用
- C++ STL入门教程(2) list双向链表使用方法(附程序代码)
- C++ 标准模板库STL 双向链表 list 使用方法与应用介绍(一)
- C++ 标准模板库STL 双向链表 list 使用方法与应用介绍(一)
- STL--> list 双向循环链表容器 接口使用及介绍。 模拟实现 STL list容器
- 使用C++实现双向链表List
- 使用WinDbg查看非当前线程所在模块的内存数据信息
- list双向链表容器
- list双向链表容器
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- Java中使用foreach遍历list的盲点,
- 使用java实现双向链表数据结构
- 使用C++实现的双向链表
- c# 链表(LinkedList)使用
- 双向链表的基本api使用
- js Map List 遍历使用示例
- 深入浅出linux内核源代码之双向链表list_head(上)