Windbg调试(关于句柄表的获取,32位)

今天利用Windbg(x86)进行了获得句柄表的调试,从中获益良多,对调试步骤和按键又一次进行了熟悉,对于句柄表页的概念更是得到了进一步的清晰认识.windbg调试和句柄表不熟悉的朋友可以借鉴我的调试步骤l来熟悉句柄表基础知识, 调试步骤和获取部分如下。

3: kd> dt _EProcess 891ad030
nt!_EPROCESS
+0x0f4 ObjectTable : 0x9eca0ef0 _HANDLE_TABLE
3: kd> dt _HANDLE_TABLE 0x9eca0ef0
nt!_HANDLE_TABLE
+0x000 TableCode : 0x83b15001 //00 01 10 11
+0x004 QuotaProcess : 0x891ad030 _EPROCESS
+0x008 UniqueProcessId : 0x000008f0 Void
+0x00c HandleLock : _EX_PUSH_LOCK
+0x010 HandleTableList : _LIST_ENTRY [ 0xa5adf668 - 0x90347b38 ]
+0x018 HandleContentionEvent : _EX_PUSH_LOCK
+0x01c DebugInfo : (null)
+0x020 ExtraInfoPages : 0n0
+0x024 Flags : 0
+0x024 StrictFIFO : 0y0
+0x028 FirstFreeHandle : 0xb04
+0x02c LastFreeHandleEntry : 0xa73f6ff8 _HANDLE_TABLE_ENTRY
+0x030 HandleCount : 0x29d
+0x034 NextHandleNeedingPool : 0x1000
+0x038 HandleCountHighWatermark : 0x2f5
3: kd> dd 0x83b15000
83b15000 8f46f000 a73f6000 00000000 00000000
3: kd> dd 8f46f000
8f46f000 00000000 fffffffe 8e3ed141 00000003 //8个字节为一个_HANDLE_TABLE_ENTRY结构体
8f46f010 8a25bca9 00100020 8a3eb621 00100020 //第一组是"垃圾"
8f46f020 9ec983c1 00020019 88ed6109 001f0001 //_HANDLE_TABLE_ENTRY中的第一个成员&8 就是_Object_Header
8f46f030 8a414881 001f0001 8f5ff521 00020019
8f46f040 8a414841 001f0003 8a28af29 021f0003
8f46f050 8a120a81 000f037f 88e2ded1 000f01ff
8f46f060 8a120a81 000f037f 9eda6171 00000001
8f46f070 8a2a0a71 00000804 88d2bac1 00000804

3: kd> dt _HANDLE_TABLE_ENTRY 8f46f020
nt!_HANDLE_TABLE_ENTRY
+0x000 Object : 0x9ec983c1 Void
+0x000 ObAttributes : 0x9ec983c1
+0x000 InfoTable : 0x9ec983c1 _HANDLE_TABLE_ENTRY_INFO
+0x000 Value : 0x9ec983c1
+0x004 GrantedAccess : 0x20019
+0x004 GrantedAccessIndex : 0x19
+0x006 CreatorBackTraceIndex : 2
+0x004 NextFreeTableEntry : 0x20019

//88ed6109&8 这个重要
3: kd> dt _object_header 88ed6108
nt!_OBJECT_HEADER
+0x000 PointerCount : 0n3
+0x004 HandleCount : 0n1
+0x004 NextToFree : 0x00000001 Void
+0x008 Lock : _EX_PUSH_LOCK
+0x00c TypeIndex : 0x24 ‘$‘
+0x00d TraceFlags : 0 ‘‘
+0x00e InfoMask : 0xc ‘‘
+0x00f Flags : 0x40 ‘@‘
+0x010 ObjectCreateInfo : 0x8a184340 _OBJECT_CREATE_INFORMATION
+0x010 QuotaBlockCharged : 0x8a184340 Void
+0x014 SecurityDescriptor : (null)
+0x018 Body : _QUAD

3: kd> !object 88ed6108+0x18
Object: 88ed6120 Type: (8792e040) ALPC Port
ObjectHeader: 88ed6108 (new version)
HandleCount: 1 PointerCount: 3

时间: 2024-10-09 06:54:28

Windbg调试(关于句柄表的获取,32位)的相关文章

扫描系统句柄表(WIN7 x86)(附录源码)

PspCidTable存放着系统中所有的进程和线程对象,其索引也就是进程ID(PID)或线程ID(TID).先通过它来看看windbg里的HANDLE_TABLE结构: 可以看到地址 0x83f41bc4中存放的内容是 0x 8da010a8,这是系统的_HANDLE_TABLE的结构. 好了,现在windbg是得到HANDLE_TABLE结构了,还是要代码实现的.这里只简单用一下加偏移: //system进程的eprocess地址 PEPROCESS EProcess = (PEPROCESS

32位MD5加密补齐丢失的0

/// <summary> /// 获取32位MD5加密字符串(已补完0) /// </summary> /// <param name="strWord"></param> /// <returns></returns> public static string GetMD5String(string strWord) { string strRes = string.Empty; MD5 md5 = MD5.C

WinDbg 调试.net程序

WinDbg支持以下三种类型的命令: ·        常规命令,用来调试进程 ·        点命令,用来控制调试器 ·        扩展命令,可以添加叫WinDbg的自定义命令,一般由扩展dll提供这些命令 PDB文件 PDB文件是由链接器产生的程序数据库文件.私有PDB文件包含私有和公有符号,源代码行,类型,本地和全局变量信息.公有PDB文件不包含类型,本地变量和源代码行信息,且只包含共有成员的调试信息. Dump文件 利用Dump工具,你可以获得进程的快照信息.一个mini-dump

Windbg调试命令详解

发表于2013 年 8 月 23 日由张佩 转载注明>> [作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd.exe.kd.exe和Windbg.exe.其中cdb.exe和ntsd.exe只能调试用户程序,Kd.exe主要用于内核调试,有时候也用于用户态调试,上述三者的一个共同特点是,都只有控制台界面,以命令行形式工作. Windbg.exe在

使用Windbg调试StackOverflowException异常

最近公司服务器端程序遇到一个堆栈溢出问题,偏偏是偶发性但是又在相对固定时间发生的,有一个服务器比较容易触发,平均隔个5.6天就会发生一次,且每次都是在8点23分左右抛出异常.服务器开发同事初步定位是定时器出了问题,单纯看代码看不出问题,打的log也没看到有用的信息(其实这里是有点能力问题的,囧~看代码也看得不认真不细致.打的log没打到点上).老大就把这个问题抛给我,让我去解决一下,提示用一些工具直接去测,比如Windbg,于是开始了Windbg之旅. 上网搜索了下Windbg相关的博客,主要从

调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令

调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (二)使用Windbg调试SQLSERVER的环境设置 windbg命令分为标准命令.元命令.扩展命令 标准命令提供最基本的调试功能,不区分大小写.如:bp g dt dv k等 元命令提供标准命令没有提供的功能,也内建在调试引擎中,以.开头.如.sympath .reload等 扩展命令用于扩展某一方面的调试功能,实现在动态加载的扩展模块中

Windbg 调试 SOS 版本问题

程序发生了崩溃,我抓了一个mini Dump,Mini dump 有一个优点就是非常的小.比full dump 要小很多. 0:020> .loadby sos clr //首先加载sos 0:020> !threads The version of SOS does not match the version of CLR you are debugging. Please load the matching version of SOS for the version of CLR you

Windbg调试托管代码

Windbg调试.net托管代码需要借助于SOS.dll,.Net 4.0的32位sos.dll的路径在C:\Windows\Microsoft.NET\Framework\v4.0.30319,64为的路径在C:\Windows\Microsoft.NET\Framework64\v4.0.30319,加载哪个版本的sos.dll要与调试的应用程序的位数一致.关于SOS调试扩展的详细介绍请参考:https://msdn.microsoft.com/zh-cn/library/bb190764(

零基础逆向工程39_Win32_13_进程创建_句柄表_挂起方式创建进程

1 进程的创建过程 打开系统 --> 双击要运行的程序 --> EXE开始执行 步骤一: 当系统启动后,创建一个进程:Explorer.exe(也就是桌面进程) 步骤二: 当用户双击某一个EXE时,Explorer 进程使用CreateProcess函数创建被双击的EXE,也就是说,我们在桌面上双 击创建的进程都是Explorer进程的子进程. CreateProcess BOOL CreateProcess( LPCTSTR lpApplicationName, // name of exe