2012年12月20日

windbg调试命令7(!runaway、~)

摘要: 1.!runaway!runaway命令显示每个线程消费的时间Bit 0 (0x1) 让调试器显示每个线程消耗的用户模式时间(user time),默认不加就是0x1Bit 1 (0x2) 显示每个线程消耗的内核时间(kernel time)。Bit 2 (0x4) 显示每个线程从创建开始经历了多少时间。就是三者的组合:1 2 3 4 5 6 70:002> !runaway User Mode Time Thread Time 0:890 0 days 0:00:00.031 2:a00 0 days 0:00:00.000 1:1174 0 days 0:00:00.0000:002 阅读全文

posted @ 2012-12-20 10:26 紫 陌 阅读(3167) 评论(0) 推荐(0) 编辑

windbg调试命令6(!peb、!teb)

摘要: PEB(Process Environment Block,进程环境块)存放进程信息,每个进程都有自己的PEB信息。位于用户地址空间。TEB(Thread Environment Block,线程环境块)系统在此TEB中保存频繁使用的线程相关的数据。位于用户地址空间,在比 PEB 所在地址低的地方。进程中的每个线程都有自己的一个TEB。调试的程序的时候,了解PEB和TEB往往对分析很有帮助。 WinDBG中 !peb 和 !teb 命令可以用来显示PEB和TEB:0:000> !pebPEB at 7ffd6000InheritedAddressSpace: NoReadImageFil 阅读全文

posted @ 2012-12-20 09:57 紫 陌 阅读(1847) 评论(0) 推荐(0) 编辑

2012年12月18日

windbg调试命令5(ln、伪寄存器)

摘要: 1.lnln 命令显示给定地址处的或者最近的符号。ln表示list near,ln命令将尽可能地给出与特定地址相关的符号,如果没有符号能够精确地与这个地址匹配,那么调试器将通过指针算法对靠近这地址的符号进行运逄,并返回运算结果符号0:000> ln 01012475(01012475) calc!WinMainCRTStartup | (0101263c) calc!__CxxFrameHandlerExact matches: calc!WinMainCRTStartup = <no type information>0:000> ln 01012475+1(0101 阅读全文

posted @ 2012-12-18 17:25 紫 陌 阅读(2466) 评论(0) 推荐(0) 编辑

windbg调试命令4(用户层.dump)

摘要: Windbg生成dump文件的方法:程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件。 步骤:1) 打开WinDBG并将之Attach 到crash的程序进程2) 输入产生dump 文件的命令WinDBG产生dump 文件的命令是 .dump ,可以选择不同的参数来生成不同类型的dump文件。选项(1): /m命令行示例:.dump /m C:\dumps\myapp.dmp注解: 缺省选项,生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少, 阅读全文

posted @ 2012-12-18 16:18 紫 陌 阅读(3740) 评论(0) 推荐(2) 编辑

windbg调试命令3(sx、ld)

摘要: 1.sxsx* 命令用来控制被调试的程序发生某个异常或特定事件时,调试器要采取的动作sx 命令显示当前进程的异常列表和所有非异常的事件列表,并且显示调试器遇到每个异常和事件时的行为。sxr 命令将所有异常和事件过滤器的状态重设为默认值。命令被清除、中断和继续选项被重设为默认值,等等。sx这个命令的输出信息可以分为三个部分:第一部分是事件处理与相应处理模式的交互,第二部分是标准的异常交互和处理行为,最后一部分是用户自定义的异常交互和处理行为以下面为例,我们先输入sxr再输入sx看下默认的处理行为都是怎么样的:0:000>sxrsxstateresettodefaults0:000>s 阅读全文

posted @ 2012-12-18 11:15 紫 陌 阅读(4299) 评论(0) 推荐(0) 编辑

windbg调试命令2(!gle、g、p)

摘要: !gle 扩展显示当前线程的最后一个错误码。这个太好记了,getlasterror取首字母:0:002>!gleLastErrorValue:(Win32)0(0)-<Unabletogeterrorcodetext>LastStatusValue:(NTSTATUS)0-STATUS_WAIT_00:002> !gleLastErrorValue: (Win32) 0 (0) - <Unable to get error code text>LastStatusValue: (NTSTATUS) 0 - STATUS_WAIT_0-all 显示目标系统中每 阅读全文

posted @ 2012-12-18 10:59 紫 陌 阅读(2142) 评论(0) 推荐(1) 编辑

windbg调试命令1(k、u、x)

摘要: k*命令显示给定线程的调用堆栈,以及其他相关信息~0 k表示打印0号线程的调用堆栈,直接用k表示打印当前线程的调用堆栈kd>~0kChildEBPRetAddr0007fddc77d191bentdll!KiFastSystemCallRet0007fdfc010021b0USER32!NtUserGetMessage+0xc0007ff1c010125e9calc!WinMain+0x25f0007ffc07c817077calc!WinMainCRTStartup+0x1740007fff000000000kernel32!BaseProcessStart+0x230:002> 阅读全文

posted @ 2012-12-18 09:34 紫 陌 阅读(5799) 评论(1) 推荐(0) 编辑

2012年10月25日

TSS任务状态段

摘要: 任务状态段(Task State Segment)是保存一个任务重要信息的特殊段。任务状态段描述符用于描述这样的系统段。任务状态段寄存器TR的可见部分含有当前任务的任务状态段描述符的选择子,TR的不可见的高速缓冲寄存器部分含有当前任务状态段的段基地址和段界限等信息。 TSS在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复。所谓任务切换是指,挂起当前正在执行的任务,恢复或启动另一任务的执行。在任务切换过程中,首先,处理器中各寄存器的当前值被自动保存到TR所指定的TSS中;然后,下一任务的TSS的选择子被装入TR;最后,从TR所指定的TSS中取出各寄存器的值送到处理器的各寄存器中。由此可. 阅读全文

posted @ 2012-10-25 10:52 紫 陌 阅读(5868) 评论(0) 推荐(1) 编辑

2012年10月8日

windbg+vmware双机调试

摘要: 最近换了机器,需要重新安装双机调试环境。但弄了近两个小时死活不行。最后经过一上午的折腾,终于弄好了。并总结出以下几点:1.启动WinDbg的时候总是提示kerneldebuggerfailedinitialization。说是Failedtoopen\\.\pipe\com_1.系统找不到指定文件。没开虚拟机就是这种情况,说明windbg和vmware连不上。2.虚拟机串口配置如图:可能有人不是这样的配置也可以调试,但最重要的在虚拟机运行起来时串口选项里devicestatus的Connected选项应经被打钩(老版本的可能是Connecting),说明虚拟机和guestOS的串口通信成功。如 阅读全文

posted @ 2012-10-08 16:29 紫 陌 阅读(2804) 评论(0) 推荐(0) 编辑

2012年9月6日

MDL

摘要: 一 MDL是什么在MSDN中有这样的定义内存描述符列表 (MDL) 是一个系统定义的结构,通过一系列物理地址描述缓冲区。执行直接 I/O 的驱动程序从 I/O 管理器接收一个 MDL 的指针,并通过 MDL 读写数据。一些驱动程序在执行直接 I/O 来满足设备 I/O 控制请求时也使用 MDL。http://msdn.microsoft.com/zh-cn/windows/hardware/gg463193.aspx这里有完整的内容,但该文章是机器人翻译过来的,所以看起来有点头疼.因此通俗的解释一下,MDL仅仅运用于内核中,在应用层并不会涉及这个结构,由于内核中的驱动有跟应用层程序通信的需要, 阅读全文

posted @ 2012-09-06 14:08 紫 陌 阅读(4486) 评论(0) 推荐(0) 编辑

导航