barriers / 阅读 / 详情

WINDBG调试没有符号文件,怎么显示函数名

2023-08-01 15:44:36
共1条回复
wio

可以使用这样的命令:

0:000> dds poi(00405798+2) l1

0051b710 7e42974e user32!GetCursorPos

命令的原理是这样的。以下面这条指令为例:

call WINCMD32+0x1a908 (0041a908)

CALL指令调用的地址0041a908处通常是一条跳转指令:

00405798 ff2510b75100 jmp dword ptr [WINCMD32+0x11b710 (0051b710)] ds:0023:0051b710={user32!GetCursorPos (7e42974e)}

0040579e 8bc0 mov eax,eax

这条跳转指令的目的其实就是跳转到IAT表中对应API表项所保存的API入口。注意上面的机器码ff2510b75100,前两个字节ff25是操作码,后四个字节10b75100是操作数,其实就是间接跳转时取最终目标的地方,转换成DWORD就是0051b710。

使用!dh命令可以找到IAT表的位置:

0:000> !dh 00400000

...

11B000 [ 2A20] address [size] of Import Directory

...

也就是说IATA表的偏移是11B000,长度是2A20,上面的地址0051b710就是在这个范围内:

0:000> ?? 0x0051b710-(0x400000+0x11B000) < 0x2a20

bool true

也可以直接dds这个表,来了解导入了哪些API......

当然也可以对IAT表设断点,调用时停下来 :-)

相关推荐

windbg使用方法

  windbg使用方法是:   1、如果还没有安装过Windbg,首先要下载安装它。打开百度首页,搜索Windbg,点击高速下载,然后安装。   2、安装成功后,可以点击开始菜单,程序中找到并启动Windbg。   3、启动后主界面。   4、可以选择文件(File)菜单附加到一个进程。   5、在打开的列表中选择要调试的进程。   6、有的进程可能权限比较高,无法调试。   7、使用管理员身份运行Windbg。   8、再选择进程,附加进程。
2023-08-01 06:17:531

Windbg如何设置应用程序的断点

,设置为 cache*d:symbols;srv*http://msdl.microsoft.com/download/symbols 可以将路径更改为自己本地的缓存路径。如果有一把好梯子的话,设置为全局代理模式,在调试的时候,会将.NET的框架PDB文件下载到该缓存目录里,我们在调试的时候就能看到更详细的信息。 当然,也可以通过命令行来主动获取微软官方调试符号。symchk /r C:WindowsSystem32*.dll /s SRV*D:symbols*http://msdl.microsoft.com/download/symbolssymchk C:WINDOWSSystem32KERNELBASE.dll /s SRV*D:symbols*http://msdl.microsoft.com/download/symbols2、加载正确版本CLR以及SOS(Son of Strike)。Windbg用户模式下,调试.Net 应用程序,我们需要正确的加载CLR以及SOS(Son of Strike)。需要注意的是,加载的CLR以及SOS版本一定要正确。如果应用程序在X86平台下编译,则需要加载C:WindowsMicrosoft.NETFrameworkv4.0.30319 目录下的SOS以及CLR,64位下编译的话,需要加载C:WindowsMicrosoft.NETFramework64v4.0.30319目录下的SOS以及CLR。2.0的程序需要加载MSCORWKS。3、例子以一个简单的Demo为例,来看一下如何在Windbg中设置断点。(在4.0FrameWork、X86平台下编译)。这个程序,根据体重身高来计算BMI指数,假定BMI指数为21的为最健康的,对给定的人员列表按照偏差大小的绝对值进行排序。让我们姑且认为偏差越小身体越健康吧。 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace WindbugDemo 7 { 8 public class Person 9 {10 //认为BMI和21偏差最小的为最健康的11 private const double BmiHelthConst = 21f;12 13 public string Name { get; set; }14 public int Age { get; set; }15 public double Height { get; set; }16 public double Weight { get; set; }17 public double BmiVariance { get { return GetBmiVariance(); } }18 //18岁至65岁可以Weight/(Height*Height)计算,否则抛出异常19 public double GetBmiVariance()20 {21 if (Age > 65 || Age < 18)22 throw new Exception("18岁以下65岁以上人群不适用此计算方法");23 double bmi = Math.Round(Weight / Math.Pow(Height, 2),2);24 double variance = Math.Abs(bmi - BmiHelthConst);25 return variance;26 }27 }28 29 public class HelthCompare : IComparer<Person>30 {31 public int Compare(Person x, Person y)32 {33 34 double diffx = x.BmiVariance;35 double diffy = y.BmiVariance;36 if (diffx == diffy)37 return 0;38 if (diffx > diffy)39 return 1;40 return -1;41 }42 }43 44 class Health45 {46 [STAThread]47 static void Main(string[] args)48 {49 Person person1 = new Person { Name = "James", Age = 35, Height = 1.70, Weight = 70 };50 Person person2 = new Person { Name = "Tony", Age = 25, Height = 1.65, Weight = 60 };51 Person person3 = new Person { Name = "John", Age = 30, Height = 1.75, Weight = 90 };52 Person[] array = new Person[] { person1, person2, person3 };53 List<Person> list = new List<Person>();54 list.AddRange(array);55 HelthCompare comparer = new HelthCompare();56 list.Sort(comparer);57 foreach(var item in list)58 {59 string text = string.Format("Name:{0} Age:{1} Height:{2} Weight:{3} BMI Variance:{4}",60 item.Name,item.Age, item.Height, item.Weight, item.BmiVariance);61 System.Console.WriteLine(text);62 }63 Console.ReadKey();64 /*65 Name:Tony Age:25 Height:1.65 Weight:60 BMI Variance:1.0466 Name:James Age:35 Height:1.7 Weight:70 BMI Variance:3.2267 Name:John Age:30 Height:1.75 Weight:90 BMI Variance:8.3968 */69 }70 }71 72 }3.1 打开Windbg,在File==》Open Executable...打开编译后的程序。指定PDB路径以及源码路径。0:000> .sympath+ d:sourceSymbol search path is: cache*d:symbols;srv*http://msdl.microsoft.com/download/symbols;d:sourceExpanded Symbol search path is: cache*d:symbols;srv*http://msdl.microsoft.com/download/symbols;d:sourceSource search path is: d:source0:000> .reloadReloading current modules.....3.2 可以使用 sxe ld:clrjit 命令,这个命令发生在clrjit加载的时候,在进入Main方法之前,这对于我们设置自己程序的断点很方便。然后输入g命令,当加载clrjit的时候,就可以命中断点了。0:000> sxe ld:clrjit0:000> g(cc8.cd0): Unknown exception - code 04242420 (first chance)ModLoad: 6d110000 6d18d000 C:WindowsMicrosoft.NETFrameworkv4.0.30319clrjit.dlleax=00000000 ebx=00000000 ecx=001437a4 edx=00000001 esi=7ffdf000 edi=0027e340eip=76df70b4 esp=0027e258 ebp=0027e2ac iopl=0 nv up ei pl zr na pe nccs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246ntdll!KiFastSystemCallRet:76df70b4 c3 ret0:000> .load C:WindowsMicrosoft.NETFrameworkv4.0.30319sos.dll0:000> .load C:WindowsMicrosoft.NETFrameworkv4.0.30319clr.dll0:000> .loadby sos clr (等同于上面两条命令)3.3 加载完SOS后,就可以用扩展命令来设置断点了。0:000> !name2ee Health!WindbugDemo.HealthModule: 00142edcAssembly: Health.exeToken: 02000004MethodTable: 001437b8EEClass: 00141304Name: WindbugDemo.Health0:000> !dumpmt -md 001437b8EEClass: 00141304Module: 00142edcName: WindbugDemo.HealthmdToken: 02000004File: D:inHealth.exeBaseSize: 0xcComponentSize: 0x0Slots in VTable: 6Number of IFaces in IFaceMap: 0--------------------------------------MethodDesc Table Entry MethodDe JIT Name6647952c 6619612c PreJIT System.Object.ToString()6648ec30 66196134 PreJIT System.Object.Equals(System.Object)6648e860 66196154 PreJIT System.Object.GetHashCode()6648e2a0 66196168 PreJIT System.Object.Finalize()0014c015 001437b0 NONE WindbugDemo.Health..ctor()0014c011 001437a4 NONE WindbugDemo.Health.Main(System.String[])0:000> !dumpmt -md 001437b8EEClass: 00141304Module: 00142edcName: WindbugDemo.HealthmdToken: 02000004File: D:inHealth.exeBaseSize: 0xcComponentSize: 0x0Slots in VTable: 6Number of IFaces in IFaceMap: 0--------------------------------------MethodDesc Table Entry MethodDe JIT Name6647952c 6619612c PreJIT System.Object.ToString()6648ec30 66196134 PreJIT System.Object.Equals(System.Object)6648e860 66196154 PreJIT System.Object.GetHashCode()6648e2a0 66196168 PreJIT System.Object.Finalize()0014c015 001437b0 NONE WindbugDemo.Health..ctor()0014c011 001437a4 NONE WindbugDemo.Health.Main(System.String[])0:000> !bpmd -md 001437a4 MethodDesc = 001437a4Adding pending breakpoints...在上面的Windbg调试窗口里,JIT为NONE的就表示还没有进行JIT编译。这种情况下,我们不能使用bp命令来设置断点的。我们可以使用bpmd命令加md参数来设置断点。输入g命令程序继续执行。0:000> !u 001437a4 Normal JIT generated codeWindbugDemo.Health.Main(System.String[])Begin 011f0050, size 5ccd:source2HealthHealth.cs @ 48:011f0050 55 push ebp011f0051 8bec mov ebp,esp... ...d:source2HealthHealth.cs @ 56:011f0377 8b8d68ffffff mov ecx,dword ptr [ebp-98h]011f037d 8b9564ffffff mov edx,dword ptr [ebp-9Ch]011f0383 3909 cmp dword ptr [ecx],ecx011f0385 e822022b65 call mscorlib_ni+0x3105ac (664a05ac) (System.Collections.Generic.List`1[[System.__Canon, mscorlib]].Sort(System.Collections.Generic.IComparer`1<System.__Canon>), mdToken: 06002283)011f038a 90 nop... ...0:000> bp 011f0377 0:000> g3.4 对于已经JIT编译的方法,我们可以采用u命令,查看反汇编,然后就可以在对应的行号用非托管应用程序的bp命令来设置断点了。以上两种方法可以在Windbg下设置断点。查找方法表还可以根据domain信息查找Module信息0:000> !dumpdomain--------------------------------------System Domain: 67840f60LowFrequencyHeap: 67841284HighFrequencyHeap: 678412ccStubHeap: 67841314Stage: OPENName: None--------------------------------------Shared Domain: 67840c08LowFrequencyHeap: 67841284HighFrequencyHeap: 678412ccStubHeap: 67841314Stage: OPENName: NoneAssembly: 003b24f0 [C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll]ClassLoader: 003b25b8 Module Name66191000 C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll--------------------------------------Domain 1: 00364d50LowFrequencyHeap: 003651a4HighFrequencyHeap: 003651ecStubHeap: 00365234Stage: OPENSecurityDescriptor: 00366920Name: Health.exeAssembly: 003b24f0 [C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dll]ClassLoader: 003b25b8SecurityDescriptor: 003af690 Module Name66191000 C:WindowsMicrosoft.NetassemblyGAC_32mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dllAssembly: 003bfbd8 [D:inHealth.exe]ClassLoader: 003bfca0SecurityDescriptor: 003bf880 Module Name00142edc D:inHealth.exe0:000> !dumpmodule -mt 00142edc Name: D:inHealth.exeAttributes: PEFile Assembly: 003bfbd8LoaderHeap: 00000000TypeDefToMethodTableMap: 00140038TypeRefToMethodTableMap: 0014004cMethodDefToDescMap: 0014009cFieldDefToDescMap: 001400dcMemberRefToDescMap: 00000000FileReferencesMap: 001400f8AssemblyReferencesMap: 001400fcMetaData start address: 0123237c (2360 bytes)Types defined in this module MT TypeDef Name------------------------------------------------------------------------------001437b8 0x02000004 WindbugDemo.HealthTypes referenced in this module MT TypeRef Name------------------------------------------------------------------------------665941b8 0x02000001 System.Object0:000> !dumpmt -md 001437b8EEClass: 00141304Module: 00142edcName: WindbugDemo.HealthmdToken: 02000004File: D:inHealth.exeBaseSize: 0xcComponentSize: 0x0Slots in VTable: 6Number of IFaces in IFaceMap: 0--------------------------------------MethodDesc Table Entry MethodDe JIT Name6647952c 6619612c PreJIT System.Object.ToString()6648ec30 66196134 PreJIT System.Object.Equals(System.Object)6648e860 66196154 PreJIT System.Object.GetHashCode()6648e2a0 66196168 PreJIT System.Object.Finalize()0014c015 001437b0 NONE WindbugDemo.Health..ctor()0014c011 001437a4 NONE WindbugDemo.Health.Main(System.String[])3.5 也可以通过JIT编译的代码地址来设置断点。0:000> !name2ee Health!Win
2023-08-01 06:18:001

如何使用Windbg分析崩溃dump

需要为Windbg软件设置符号表路径,作为蓝屏原因分析数据库,否则软件将没有作用。单击File--选择Symbol File Path,在弹出的对话框Symbol Path文本框中输入SRV*C:Symbols*http://msdl.microsoft.com/download/symbols,单击OK。设置完毕后单击File--选择Open Crash Dump来打开蓝屏文件,在弹出的对话框中点选到C:WindowsMinidump文件夹,单击我们要分析的蓝屏文件,单击打开。在弹出的对话框Save Information for workspace?(是否保存信息到工作区)中单击Yes。(如果下次不想再被提示,可以勾选Don"t ask again in the WinDbg session)。接下来就是对文件进行分析,这需要一定的经验和知识。这里我们着重可以看一下System Uptime(开机时间)和Probably Caused By(可能引起故障的原因是)。需要进一步分析,可以单击!analyze -v,此时我们可以从中提取到蓝屏错误代码和引起蓝屏的程序名称,再通过网络搜索这些程序名和代码等方式弄清原因。
2023-08-01 06:18:071

如何使用WinDbg调试进程信息

使用WinDbg调试进程信息的步骤:1、百度搜索下载windbg软件(建议去微软网站上下载),运行windbg2、打开windbg程序3、按F6或者是 file——>Attach to a Proces4、然后就能看到本机所有的进程信息5、选择一个进程,这里选择chrome浏览器的进程6、弹出提示框选择yes7、然后出现中断,chrome浏览器不能使用,在输入框里面输入G 然后按回车开始8、开始调试输出9、切换过去吧Chrome浏览器关闭掉,然后windbg调试也退出,接着只要保存数据即可。
2023-08-01 06:18:571

Windows内核调试器的WinDBG

WinDBG和用户调试器一点很大不同是内核调试器在一台机器上启动,通过串口调试另一个相联系的以Debug方式启动的系统,这个系统可以是虚拟机上的系统,也可以是另一台机器上的系统(这只是微软推荐和实现的方法,其实象SoftICE这类内核调试器可以实现单机调试)。很多人认为主要功能都是在WinDBG里实现,事实上并不是那么一回事,windows已经把内核调试的机制集成进了内核,WinDBG、kd之类的内核调试器要做的仅仅是通过串行发送特定格式数据包来进行联系,比如中断系统、中断点、显示内存数据等等。然后把收到的数据包经过WinDBG处理显示出来。在进一步介绍WinDBG之前,先介绍两个函数:KdpTrace、KdpStub,我在《windows异常处理流程》一文里简单提过这两个函数。现在再提一下,当异常发生于内核态下,会调用KiDebugRoutine两次,异常发生于用户态下,会调用KiDebugRoutine一次,而且第一次调用都是刚开始处理异常的时候。当WinDBG未被加载时KiDebugRoutine为KdpStub,处理也很简单,主要是对由int 0x2d引起的异常如DbgPrint、DbgPrompt、加载卸载SYMBOLS(关于int 0x2d引起的异常将在后面详细介绍)等,把Context.Eip加1,跳过int 0x2d后面跟着的int 0x3指令。真正实现了WinDBG功能的函数是KdpTrap,它负责处理所有STATUS_BREAKPOINT和STATUS_SINGLE_STEP(单步)异常。STATUS_BREAKPOINT的异常包括int 0x3、DbgPrint、DbgPrompt、加载卸载SYMBOLS。DbgPrint的处理最简单,KdpTrap直接向调试器发含有字符串的包。DbgPrompt因为是要输出并接收字符串,所以先将含有字符串的包发送出去,再陷入循环等待接收来自调试器的含有回复字符串的包。SYMBOLS的加载和卸载通过调用KdpReportSymbolsStateChange,int 0x3断点异常和int 0x1单步异常(这两个异常基本上是内核调试器处理得最多的异常)通过调用KdpReportExceptionStateChange,这两个函数很相似,都是通过调用KdpSendWaitContinue函数。KdpSendWaitContinue可以说是内核调试器功能的大管家,负责各个功能的分派。这个函数向内核调试器发送要发送的信息,比如当前所有寄存器状态,每次单步后我们都可以发现寄存器的信息被更新,就是内核调试器接受它发出的包含最新机器状态的包;还有SYMBOLS的状态,这样加载和卸载了SYMBOLS我们都能在内核调试器里看到相应的反应。然后KdpSendWaitContinue等待从内核调试器发来的包含命令的包,决定下一步该干什么。让我们来看看KdpSendWaitContinue都能干些什么:case DbgKdReadVirtualMemoryApi:KdpReadVirtualMemory(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdReadVirtualMemory64Api:KdpReadVirtualMemory64(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteVirtualMemoryApi:KdpWriteVirtualMemory(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteVirtualMemory64Api:KdpWriteVirtualMemory64(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdReadPhysicalMemoryApi:KdpReadPhysicalMemory(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWritePhysicalMemoryApi:KdpWritePhysicalMemory(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdGetContextApi:KdpGetContext(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdSetContextApi:KdpSetContext(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteBreakPointApi:KdpWriteBreakpoint(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdRestoreBreakPointApi:KdpRestoreBreakpoin(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdReadControlSpaceApi:KdpReadControlSpace(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteControlSpaceApi:KdpWriteControlSpace(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdReadIoSpaceApi:KdpReadIoSpace(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteIoSpaceApi:KdpWriteIoSpace(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdContinueApi:if (NT_SUCCESS(ManipulateState.u.Continue.ContinueStatus) != FALSE) {return ContinueSuccess;} else {return ContinueError;}break;case DbgKdContinueApi2:if (NT_SUCCESS(ManipulateState.u.Continue2.ContinueStatus) != FALSE) {KdpGetStateChange(&ManipulateState,ContextRecord);return ContinueSuccess;} else {return ContinueError;}break;case DbgKdRebootApi:KdpReboot();break;case DbgKdReadMachineSpecificRegister:KdpReadMachineSpecificRegister(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdWriteMachineSpecificRegister:KdpWriteMachineSpecificRegister(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdSetSpecialCallApi:KdSetSpecialCall(&ManipulateState,ContextRecord);break;case DbgKdClearSpecialCallsApi:KdClearSpecialCalls();break;case DbgKdSetInternalBreakPointApi:KdSetInternalBreakpoint(&ManipulateState);break;case DbgKdGetInternalBreakPointApi:KdGetInternalBreakpoint(&ManipulateState);break;case DbgKdGetVersionApi:KdpGetVersion(&ManipulateState);break;case DbgKdCauseBugCheckApi:KdpCauseBugCheck(&ManipulateState);break;case DbgKdPageInApi:KdpNotSupported(&ManipulateState);break;case DbgKdWriteBreakPointExApi:Status = KdpWriteBreakPointEx(&ManipulateState,&MessageData,ContextRecord);if (Status) {ManipulateState.ApiNumber = DbgKdContinueApi;ManipulateState.u.Continue.ContinueStatus = Status;return ContinueError;}break;case DbgKdRestoreBreakPointExApi:KdpRestoreBreakPointEx(&ManipulateState,&MessageData,ContextRecord);break;case DbgKdSwitchProcessor:KdPortRestore ();ContinueStatus = KeSwitchFrozenProcessor(ManipulateState.Processor);KdPortSave ();return ContinueStatus;case DbgKdSearchMemoryApi:KdpSearchMemory(&ManipulateState,&MessageData,ContextRecord);break;读写内存、搜索内存、设置/恢复断点、继续执行、重启等等,WinDBG里的功能是不是都能实现了?呵呵。每次内核调试器接管系统是通过调用在KiDispatchException里调用KiDebugRoutine(KdpTrace),但我们知道要让系统执行到KiDispatchException必须是系统发生了异常。而内核调试器与被调试系统之间只是通过串口联系,串口只会发生中断,并不会让系统引发异常。那么是怎么让系统产生一个异常呢?答案就在KeUpdateSystemTime里,每当发生时钟中断后在HalpClockInterrupt做了一些底层处理后就会跳转到这个函数来更新系统时间(因为是跳转而不是调用,所以在WinDBG断下来后回溯堆栈是不会发现HalpClockInterrupt的地址的),是系统中调用最频繁的几个函数之一。在KeUpdateSystemTime里会判断KdDebuggerEnable是否为TRUE,若为TRUE则调用KdPollBreakIn判断是否有来自内核调试器的包含中断信息的包,若有则调用DbgBreakPointWithStatus,执行一个int 0x3指令,在异常处理流程进入了KdpTrace后将根据处理不同向内核调试器发包并无限循环等待内核调试的回应。现在能理解为什么在WinDBG里中断系统后堆栈回溯可以依次发现KeUpdateSystemTime->RtlpBreakWithStatusInstruction,系统停在了int 0x3指令上(其实int 0x3已经执行过了,只不过Eip被减了1而已),实际已经进入KiDispatchException->KdpTrap,将控制权交给了内核调试器。系统与调试器交互的方法除了int 0x3外,还有DbgPrint、DbgPrompt、加载和卸载symbols,它们共同通过调用DebugService获得服务。NTSTATUS DebugService(ULONG ServiceClass,PVOID Arg1,PVOID Arg2){NTSTATUS Status;__asm {mov eax,ServiceClassmov ecx,Arg1mov edx,Arg2int 0x2dint 0x3mov Status,eax}return Status;}ServiceClass可以是BEAKPOINT_PRINT(0x1)、BREAKPOINT_PROMPT(0x2)、BREAKPOINT_LOAD_SYMBOLS(0x3)、BREAKPOINT_UNLOAD_SYMBOLS(0x4)。为什么后面要跟个int 0x3,M$的说法是为了和int 0x3共享代码(我没弄明白啥意思-_-),因为int 0x2d的陷阱处理程序是做些处理后跳到int 0x3的陷阱处理程序中继续处理。但事实上对这个int 0x3指令并没有任何处理,仅仅是把Eip加1跳过它。所以这个int 0x3可以换成任何字节。int 0x2d和int 0x3生成的异常记录结(EXCEPTION_RECORD)ExceptionRecord.ExceptionCode都是STATUS_BREAKPOINT(0x80000003),不同是int 0x2d产生的异常的ExceptionRecord.NumberParameters>0且ExceptionRecord.ExceptionInformation对应相应的ServiceClass比如BREAKPOINT_PRINT等。事实上,在内核调试器被挂接后,处理DbgPrint等发送字符给内核调试器不再是通过int 0x2d陷阱服务,而是直接发包。用M$的话说,这样更安全,因为不用调用KdEnterDebugger和KdExitDebugger。最后说一下被调试系统和内核调试器之间的通信。被调试系统和内核调试器之间通过串口发数据包进行通信,Com1的IO端口地址为0x3f8,Com2的IO端口地址为0x2f8。在被调试系统准备要向内核调试器发包之前先会调用KdEnterDebugger暂停其它处理器的运行并获取Com端口自旋锁(当然,这都是对多处理器而言的),并设置端口标志为保存状态。发包结束后调用KdExitDebugger恢复。每个包就象网络上的数据包一样,包含包头和具体内容。包头的格式如下:typedef struct _KD_PACKET {ULONG PacketLeader;USHORT PacketType;USHORT ByteCount;ULONG PacketId;ULONG Checksum;} KD_PACKET,*PKD_PACKET;PacketLeader是四个相同字节的标识符标识发来的包,一般的包是0x30303030,控制包是0x69696969,中断被调试系统的包是0x62626262。每次读一个字节,连续读4次来识别出包。中断系统的包很特殊,包里数据只有0x62626262。包标识符后是包的大小、类型、包ID、检测码等,包头后面就是跟具体的数据。这点和网络上传输的包很相似。还有一些相似的地方比如每发一个包给调试器都会收到一个ACK答复包,以确定调试器是否收到。若收到的是一个RESEND包或者很长时间没收到回应,则会再发一次。对于向调试器发送输出字符串、报告SYMBOL情况等的包都是一接收到ACK包就立刻返回,系统恢复执行,系统的表现就是会卡那么短短一下。只有报告状态的包才会等待内核调试器的每个控制包并完成对应功能,直到发来的包包含继续执行的命令为止。无论发包还是收包,都会在包的末尾加一个0xaa,表示结束。现在我们用几个例子来看看调试流程。记得我以前问过jiurl为什么WinDBG的单步那么慢(相对softICE),他居然说没觉得慢?*$&$^$^(&(&;(我ft。现在可以理解为什么WinDBG的单步和从操作系统正常执行中断下来为什么那么慢了。单步慢是因为每单步一次除了必要的处理外,还得从串行收发包,怎么能不慢。中断系统慢是因为只有等到时钟中断发生执行到KeUpdateSystemTime后被调试系统才会接受来自WinDBG的中断包。现在我们研究一下为什么在KiDispatchException里不能下断点却可以用单步跟踪KiDispatchException的原因。如果在KiDispatchException中某处下了断点,执行到断点时系统发生异常又重新回到KiDispatchException处,再执行到int 0x3,如此往复造成了死循环,无法不能恢复原来被断点int 0x3所修改的代码。但对于int 0x1,因为它的引起是因为EFLAG寄存中TF位被置位,并且每次都自动被复位,所以系统可以被继续执行而不会死循环。现在我们知道了内部机制,我们就可以调用KdXXX函数实现一个类似WinDBG之类的内核调试器,甚至可以替换KiDebugRoutine(KdpTrap)为自己的函数来自己实现一个功能更强大的调试器,呵呵。
2023-08-01 06:19:191

如何使用WinDbg调试进程信息

1. 必须命令行设置要析进程打用户堆栈信息:C:Program FilesDebugging Tools for Windows (x64)>gflags.exe -iYourDebugProcess.exe +ust2. 必须Debug版本进程3. 设置windbgpdb路径即symbol path4. 利用windbgAttachToProcess (貌似面案行:目标机器产转储文件(dump)用windbg析)5. 利用!heap命令示例:0:032> !heap -sNtGlobalFlag enables following debugging aids for new heaps:stack back tracesLFH Key : 0x00000052389f3a7eTermination on corruption : ENABLEDHeap Flags Reserv Commit Virt Free List UCR Virt Lock Fast(k) (k) (k) (k) length blocks cont. heap
2023-08-01 06:19:311

如何用windbg分析memory.dmp文件

在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试。在开发人员测试出现的bug,我们可以直接在本地进行调试。如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试(关于vs2010远程调试的方法,请参考http://blog.sina.com.cn/s/blog_a459dcf5010153o7.html),然是当程序在用户手中出现崩溃此时我们可以采用Remote Debugger进行调试,但是如果此时开发人员无法直接去用户现场调试,此时就需要用户生成DMP文件,以便开发人员使用DMP文件进行分析。本文主要介绍C++开发过程中出现程序崩溃后,如何进行分析定位bug(基于xp系统)。一、DMP文件获取设置(1)在运行窗口中输入 drwtsn32 -i ,并且点击确定WinDbg分析DMP文件方法完全攻略(2)在(1)确定后弹出如下对话框WinDbg分析DMP文件方法完全攻略(3)在(2)弹出的确定框后点击确定按钮完成,将Dr.Watson设置为默认应用程序调试程序。Dr.Watson系统自带的程序。(4)再次在运行窗口中输入:drwtsn32,如下图:WinDbg分析DMP文件方法完全攻略(5)点击确定按钮,在弹出的对话框中按照下列方式设置WinDbg分析DMP文件方法完全攻略(6) 点击确定按钮完成DMP文件设置。二、关闭Dr.Watson方法(1)打开注册表(2)在注册表中进入主键[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAeDebug],然后将“AUTO”键值设置为0如下图:WinDbg分析DMP文件方法完全攻略三、Windbg下载地址http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx,下载完成后安装四、DMP文件获取(1) 用vs2010创建一个基于win32的程序,其源码如下:WinDbg分析DMP文件方法完全攻略(2)我们知道在学习C++中整数不能跟0进行除运算,否则会引起程序崩溃。而(1)中就是编写能触发0的异常,导致程序结束运行的程序。编译(1)中的程序,结果如下:WinDbg分析DMP文件方法完全攻略(3)运行(2)中test.exe程序 ,程序崩溃。如下图:WinDbg分析DMP文件方法完全攻略(4) 按照《一、DMP文件获取设置》步骤实现Dr.Watson设置为默认应用程序调试程序。(5)再次运行运行(2)中test.exe程序 如下图:WinDbg分析DMP文件方法完全攻略点击确定完成dmp文件的生成。(6)打开在(4)中设置dmp文件路径。(本例中默认地址为:C:Documents and SettingsAll UsersApplication DataMicrosoftDr Watson)如下图:WinDbg分析DMP文件方法完全攻略其中user.dmp就是我们需要的dmp文件。五、分析《四、DMP文件获取》中获取的DMP文件
2023-08-01 06:19:411

如何使用WinDBG跟踪调试ASL/ACPI

在现代计算机中,硬件和固件(BIOS)都必须符合ACPI规范,以便操作系统可以控制所有模块的自动配置和电源管理。 使用WinDbg调试ACPI代码通常需要两台计算机,一台是目标机(Debuggee),另一台作为主机(Debugger)。下面就介绍一下怎么在两台机器上建立调试环境。1、配置调试Debuggee的连接方式Windbg支持COM、1394、USB2.0三种不同的连接方式,看到网上有些文章关于使用USB2.0来连接,需要购买特殊的USB调试线,而且价格不菲,本篇文章就不讨论了。笔记本电脑一般都没有COM端口,只好使用1394或是COM转USB,但在这里我只想讨论怎么使用COM端口来连接。启动到操作系统,使用bootcfg命令或直接使用文本编辑器修改boot.ini文件,指定调试使用的端口及参数。为了使用COM端口来调试,需要在启动参数中加入/debug参数,并指定/debugport和/baudrate子参数来作为启动项。下面这个boot.ini文件的第一个启动项就是配置使用COM端口。/debugport子参数指出使用Debuggee的哪个COM口,/baudrate指出连接的速度(默认是每秒19200位)。[boot loader]timeout=30default=multi(0)disk(0)rdisk(0)partition(1)/WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Debugging with Cable" /fastdetect /debug /debugport=COM1 /baudrate=57600multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional" /fastdetect下面的例子使用bootcfg命令设置第一个启动项使用COM1端口、波特率为115200。bootcfg的/debug开关打开,/port开关及/baud参数指出端口和速度,/ID开关指出修改的是第一个启动项。bootcfg /debug ON /port COM1 /baud 115200 /ID 1
2023-08-01 06:19:481

如何使用windbg调试.exe

方法/步骤1请自行百度搜索下载windbg软件建议去微软网站上下载运行windbg打开windbg程序按F6或者是 file——>Attach to a Proces然后就能看到本机所有的进程信息选择一个进程这里选择chrome浏览器的进程弹出提示框选择yes然后出现中断chrome浏览器不能使用在输入框里面输入G 然后按回车开始开始调试输出我们切换过去吧Chrome浏览器关闭掉然后windbg调试也退出接着我们只要保存数据即可
2023-08-01 06:19:571

如何用WinDbg分析MEMORY.DMP文件

一、DMP文件获取设置(1)在运行窗口中输入 drwtsn32 -i ,并且点击确定WinDbg分析DMP文件方法完全攻略(2)在(1)确定后弹出如下对话框WinDbg分析DMP文件方法完全攻略(3)在(2)弹出的确定框后点击确定按钮完成,将Dr.Watson设置为默认应用程序调试程序。Dr.Watson系统自带的程序。(4)再次在运行窗口中输入:drwtsn32,如下图:WinDbg分析DMP文件方法完全攻略(5)点击确定按钮,在弹出的对话框中按照下列方式设置WinDbg分析DMP文件方法完全攻略(6) 点击确定按钮完成DMP文件设置。
2023-08-01 06:20:151

windbg.exe安装后怎么用

方法/步骤1请自行百度搜索下载windbg软件建议去微软网站上下载运行windbg打开windbg程序按F6或者是 file——>Attach to a Proces然后就能看到本机所有的进程信息选择一个进程这里选择chrome浏览器的进程弹出提示框选择yes然后出现中断chrome浏览器不能使用在输入框里面输入G 然后按回车开始开始调试输出我们切换过去吧Chrome浏览器关闭掉然后windbg调试也退出接着我们只要保存数据即可
2023-08-01 06:20:221

windbg打不开 dmp文件?

dmp文件打开器(debugging tools for windows) 6.12.2.633微软官方版windows发生蓝屏时,如果系统属性有下图设置,windows会自动生成minidump文件,该文件记录蓝屏生成代码和导致蓝屏出现的进程,通过windebug的软件来分析这个minidump文件.我们就可以找到蓝屏出错的原因了。这个文件保存目录是C:windowsminidump文件夹,一般生成的名字为:Mini040108-01.dmp.系统重启时内存的dump,里边就是当时内存中的数据,要分析这个,得很要两把刷子,你不必费心去试了吧?!! 没有工具打得开DMP文件,必须用imp工具导入数据库或者windbg软件调试 微软在Windows中设计了一个功能,就是在蓝屏出现后,keBugCheck能够生成一个侦错文件一Memory.dmp(-般位于系统目录中,比如:C:WINNT), 它记录了发生篮屏时的详细情况,以便微软专家对错误进行分析。当然,一般用户即使打开它,也根本看不懂其中奥秘。微软建议在遇到蓝屏后,将Memory.dmp压缩并通过FTP、邮件或其他方式寄送给他们,但过程比较繁索,目前还没有人证明这样能尽快得到来自微软的解决方案。如果你对Memory.dmp的内容感兴趣,可运行windows2000安装光盘support ools文件夹中setup.exe来安装其支持工具,然后再C:Program FilesSupport Tools文件夹中找到DumPchk.exe,它是一个命令行工具,可以打开Momory.dmp并显示其中内容。 默认生成的Memory.dmp体积基本与你的系统内存相等,可以按下Win+Break组合键打开“系统属性”,进入“高级--启动和故障恢复”,在“写入调试信息”项选择是否生成Memory.dmp、“小内存转储”、“核心内存转储”或“完全内存转储”。建议选择“无”,因为Memory.dmp可能只对微软有用,并且我们一般也不会选择发给微软
2023-08-01 06:20:311

如何使用windbg在驱动加载时下断

首先说说应用层的调试吧.当我们在调试windows可执行程序的时候,通过将PE文件头中的ImageBase和AddressOfEntryPoint相加,从而得出第一条指令的地址.针对这个地址下断之后目标程序就中断在了了入口处.但是这个方法在驱动调试的时候却有心无力.这是因为可执行程序都是首先被加载到各自的私有地址空间,他们不会有地址冲突.然而驱动程序运行在内核里面,所有的驱动程序共享一个地址空间.所以需要重新设定基地址.1.利用bu命令下延迟断点.之前提到过,bu可以针对符号下断点.这里是用bu下延迟断点的意义在于即使目标驱动没有被加载,windbg也允许我们针对符号设置断点.当新加载驱动程序后,windbg就会检查驱动程序中是否包含了设置了延迟断点的函数.如果找到了,就把断点替换为地址形式,然后再设置断点.笔者的测试驱动程序为TestDriver.sys.[plain] view plaincopyprint?0: kd> .sympath Symbol search path is: E:Symbolwindbg Symbols;E:CodeVc_codeRing3Ring0Driverobjchk_wxp_x86i386 Expanded Symbol search path is: e:symbolwindbg symbols;e:codevc_code ing3ring0driverobjchk_wxp_x86i386 0: kd> .srcpath Source search path is: E:CodeVc_codeRing3Ring0Driver 在VMware客户机里,安装驱动后,敲下 net start TestDevice之后,系统理所应当的被断下来了.[plain] view plaincopyprint?Breakpoint 0 hit TestDriver!DriverEntry: f8c4ee10 8bff mov edi,edi 假如我们调试的驱动并不是以DriverEntry作为入口函数,bu针对符号下断也就没有了意义.但是我们可以使用模块加偏移的方式下断.假设TestDriver的入口函数的偏移为0xFB4.直接bu TestDriver+0xFB4即可.2.在系统调用DriverEntry之前下断.现在来看看我们的程序,中断在了DriverEntry之中.我们能不能在进入DriverEntry之前下断.首先我们dv和esp看一下当前的栈[plain] view plaincopyprint?1: kd> dv pDriverObject = 0x81f346e8 pRegistryPath = 0x81865000 "REGISTRYMACHINESYSTEMControlSet001ServicesTestDevice" status = 0n8 1: kd> r esp esp=f8af9c88 1: kd> dd f8af9c88 L8 f8af9c88 80582377 81f346e8 81865000 00000000 f8af9c98 b2926cf4 00000000 00000018 00000000 dv命令只显示了参数,还是用esp靠谱一点,至少给出了我们返回地址0x80582377.接下来该ln命令登场了[plain] view plaincopyprint?1: kd> ln 80582377 (80581d0a) nt!IopLoadDriver+0x66d | (80582442) nt!IopLoadUnloadDriver 返回地址位于nt!IopLoadDriver+0x66d处,直接反汇编一下吧,看看再哪里调用了DriverEntry[plain] view plaincopyprint?0: kd> bu TestDriver!DriverEntry 0: kd> bl 0 eu 0001 (0001) (TestDriver!DriverEntry) <pre name="code" class="plain">1: kd> u nt!IopLoadDriver+0x660 nt!IopLoadDriver+0x660: 8058236a 8b7d80 mov edi,dword ptr [ebp-80h] 8058236d ffb570ffffff push dword ptr [ebp-90h] 80582373 57 push edi 80582374 ff572c call dword ptr [edi+2Ch] 80582377 3bc3 cmp eax,ebx 80582379 8b8d68ffffff mov ecx,dword ptr [ebp-98h] 8058237f 8945ac mov dword ptr [ebp-54h],eax 80582382 8901 mov dword ptr [ecx],eax</pre><br> <pre></pre> <pre></pre> <pre></pre> <pre></pre> 0x80582377处是nt!IopLoadDriver+0x66d.前面的call指令占了3个字节.所以我们下断在nt!IopLoadDriver+0x66a就能在进入DriverEntry之前中断下来.3.使用事件异常先来看看系统中提供了哪些事件异常吧.直接sx下[plain] view plaincopyprint?1: kd> sx ct - Create thread - ignore et - Exit thread - ignore cpr - Create process - ignore epr - Exit process - ignore <strong>ld - Load module - output</strong> ud - Unload module - ignore ser - System error - ignore ibp - Initial breakpoint - break iml - Initial module load - ignore out - Debuggee output - output 这里我们要设置一下Load module事件为break, sxe -set enable sxd - set disable sxi -set ignore sxn -set output[plain] view plaincopyprint?1: kd> sxe ld 1: kd> sx ct - Create thread - ignore et - Exit thread - ignore cpr - Create process - ignore epr - Exit process - ignore ld - Load module - break ud - Unload module - ignore ser - System error - ignore ibp - Initial breakpoint - break iml - Initial module load - ignore out - Debuggee output - output 加载我们的驱动吧,在load module的时候系统中断然后我们找到模块基址,并在入口处下断即可.[plain] view plaincopyprint?1: kd> lm n start end module name [...] f8b9c000 f8b9d100 WMILIB WMILIB.SYS f8b9e000 f8b9f580 intelide intelide.sys f8ba0000 f8ba1700 dmload dmload.sys f8ba4000 f8ba5280 vmmouse vmmouse.sys f8bb0000 f8bb1100 swenum swenum.sys f8bb6000 f8bb7280 USBD USBD.SYS f8bba000 f8bbbf00 Fs_Rec Fs_Rec.SYS f8bbe000 f8bbf080 Beep Beep.SYS f8bc2000 f8bc3080 mnmdd mnmdd.SYS f8bc6000 f8bc7080 RDPCDD RDPCDD.sys f8bf8000 f8bf9a80 ParVdm ParVdm.SYS f8bfc000 f8bfde00 vmmemctl vmmemctl.sys <strong>f8c4e000 f8c4f300 TestDriver TestDriver.sys</strong> [...] 解析一下pe文件[plain] view plaincopyprint?1: kd> !dh -a f8c4e000 File Type: EXECUTABLE IMAGE FILE HEADER VALUES 14C machine (i386) 6 number of sections 5077C38E time date stamp Fri Oct 12 15:15:26 2012 0 file pointer to symbol table 0 number of symbols E0 size of optional header 102 characteristics Executable 32 bit word machine OPTIONAL HEADER VALUES 10B magic # 9.00 linker version C00 size of code 280 size of initialized data 0 size of uninitialized data <strong> FB4 address of entry point</strong> 480 base of code ----- new ----- [...] 然后bp TestDriver+0xFB4即可让系统中断在我们驱动程序的入口处.
2023-08-01 06:20:381

用windbg检测蓝屏,检测出来显示这个,是什么原因呢?

上面的信息没有什么用。蓝屏简单判断法:一、如果蓝屏后重启,进安全模式也会蓝屏,或者蓝屏代码不固定,总是在变化,基本都是存在硬件故障造成的。1.内存条接触不良。拔出内存条,用橡皮擦仔细擦拭金手指,并对卡槽清理灰尘,再插上内存条。2.检查硬盘是否有坏道。用磁盘坏道检测工具对硬盘进行全面的检测和修复。3.检查散热情况。打开后盖或机箱,看看各个风扇是否正常?彻底清理主板和风扇的灰尘,风扇的轴承要上一点机油来润滑。安装“鲁大师”,对各个硬件进行密切地监控。4. .检查显卡。如果电脑的显卡是可以拔插的,用橡皮擦仔细擦拭金手指,再插上显卡。5. 检查电源,看看电源是否正常。二、其他不属于上面情况的蓝屏,大都是系统或软件原因造成的。需检查驱动是否正常?是否存在软件冲突或兼容性问题?电脑有无病毒木马?系统有无致命错误或系统文件丢失损坏?如果是系统的问题,进入“安全模式”,启用“系统还原”功能,还原系统到上一次正常开机的时间段。如果你的系统没有开启“系统还原”功能,则将你最近安装的驱动、程序、补丁全部缷载掉。如果还不行,则应该是系统有问题。建议重装原版(完全安装版)系统。
2023-08-01 06:20:484

调试逆向 windbg的本地符号怎么设置

  运行WinDbg->菜单->File->Symbol File Path  SRV*C:MyLocalSymbols*http://msdl.microsoft.com/download/symbols  (按照这样设置,WinDbg将先从本地文件夹C:MyCodesSymbols中查找Symbo...  我是这样写的  E:SPsymbolsSdll;SRV*D:Program Filessymbols*http://msdl.microsoft.com/download/symbols  E:SPsymbolsSdll里面有600多M的pdb了 但是他总是下载pdb到D:Program Filessymbols
2023-08-01 06:20:571

电脑蓝屏求解决,用windbg分析了求指教

1)您的电脑蓝屏的时候,您在电脑干什么呢,能说说吗?我会跟据您说的较为准确的回答您。蓝屏代码或事件查看器里面的内容普通人是看不懂的,请将你在蓝屏前电脑的表现,和你操作说的详细些(我跟据你提供的信息重新回答你)。一般蓝屏是自己不正确操作引起的,记住容易引起蓝屏的操作不做。电脑不要满负荷操作,就是在玩游戏、看视频时、下载时、看网页的同时在干别的操作最容易死机、蓝屏,因此在玩游戏、看视频、下载时、看网页时不要在操作别的东西了。不管您在干什么,只要一有卡的迹象时就赶紧停止手头的操作退出在试,这样就不会蓝屏,如果还是这样就不要玩了或是不要看了。硬件方面:如果内存小请加内存条,硬盘是否有坏道,硬件是否不兼容或是故障,在用鲁大师测试一下CPU等硬件的温度是否高。2)如果您说的是开机蓝屏是与您关机前的不当操作有关系吧?比如:玩游戏、看视频、操作大的东西、使用电脑时间长造成的卡引起的吧?或下载了不合适的东西、或删除了系统文件、或断电关机等,故障不会无缘无故的发生吧?反复开关机试试,放一段时间试试,确实不可以就重装系统吧,如果自己重装不了,到维修那里找维修的人帮助您。只要注意自己的电脑不卡机、蓝屏、突然关机,开机就不会这样了。3)有问题请您追问我。如果一看代码或系统日志或蓝屏DMP文件分析工具就可以准确知道问题在哪里谁都可以成为专家了,但是既使到微软网站搜索出来的答案也是让人摸不到头脑,我的实践是,解决电脑问题靠技术与实践,没有捷径的道路可走。
2023-08-01 06:21:071

如何用windbg分析64位机上32位程序的dump文件

首先,我们使用windbg打开dump文件。这时候如果直接输入!analyze -v ,得到的堆栈结果肯定是看不到想看的结果的。其次,加载wow64exts模块,因为需要这个模块帮助把64位的dump,转换成32位的dump。输入 .load wow64exts再次,进行转换。输入!sw最后,按照分析32位dump文件的方法,分析这个dump。
2023-08-01 06:21:141

这是用WinDbg打开的蓝屏文件,哪位电脑大神帮忙分析一下蓝屏原因

系统文件导致,先杀毒,清理磁盘
2023-08-01 06:21:212

蓝屏了~这是windbg得出的,求解决啊~谢谢~

你的电脑蓝屏前,你在电脑干什么呢,能说说吗?一般蓝屏代码或事件查看器里面的内容普通人是看不懂的,请将你在蓝屏前电脑的表现,和你操作说的详细些。下载什么软件、补丁,升级了什么硬件了吗?详细的说说蓝屏前你做了什么,可能就是这些操作引起的蓝屏的发生,有问题请追问我(我跟据你提供的信息重新回答你)。1、蓝屏前下载了什么软件、补丁、插件、驱动等全部卸载试试,如果是驱动不合适,请下载驱动精灵升级驱动。2、如果电脑有木马,请下载Win清理助手、金山卫士、360急救箱查杀木马。3、如果不经常出现蓝屏关机在开机就可以了,还是不行,请开机按F8不动到高级选项出现在松手,选“最近一次的正确配置”回车修复,在不行还原一下系统或重装系统。4、如果是硬件问题引起的,或超频了硬件将BIOS电池放电(恢复BIOS出厂默认值)建议插拔一下显卡、内存等硬件,清理一下电脑里的卫生,并且擦亮显卡、内存的金手指(在测试一下硬件的温度是否过高)。一般蓝屏是自己不正确操作引起的,记住容易引起蓝屏的操作不做。电脑不要满负荷操作,就是在玩游戏、看视频时、下载时、看网页的同时在干别的操作最容易死机、蓝屏,因此在玩游戏、看视频、下载时、看网页时不要在操作别的东西了(看看是不是这个问题引起的)。如果是开机蓝屏数数0-100检测硬盘请说一下。
2023-08-01 06:21:413

如何在WinDBG中切换当前的线程

命令很简单:~0s 切换到0号线程~3s 切换到3号线程一些其他命令:~*e !clrstack 遍历每个线程, 依次输出它们的托管调用栈.!threads 查看所有的托管线程
2023-08-01 06:21:481

如何利用 WinDbg 进行双机调试

  其实并不是只有在生成不了转储文件的情形下才能使用双机调试,在任何情况下都是可以使用的,尤其是调试内核问题时,双机调试不必限于转储文件类型,均可获得一切可以获得的信息,相当于完全内存转储了。而且,双机调试可以调试到系统启动阶段和之后任意时刻的问题,这是内存转储做不到的。因此只要满足连接条件,将两台机器相连,我们就可以进行双机调试了。下面我们通过表格比较一下可用的三种连接方式:    连接类型  说明    COM  使用零调制解调器(Null-Modem)线缆,也就是两个头都是母孔的RS232线,通过COM端口连接    1394  利用IEEE 1394线缆连接,要求调试机和被调机运行相同版本的至少为Windows XP的系统    USB 2.0  使用一种内置硬件芯片来支持调试的特制 USB 线缆连接,要求被调机运行的系统至少为Windows Vista      在双机调试中,我们一般选择对硬件和软件复杂度要求最低的 COM 对接方式进行连接。当然,目前很多的笔记本计算机并没有再保留 COM 端口,那就要采取别的方式进行双机调试了。这样,笔记本用户进行双机调试就显得复杂了许多,所以在能生成内存转储文件的情况下还是尽量分析内存转储比较好。另外,在双机调试之前,除了连接好线缆,我们还必须在被调机上做一些设置才能让我们进行调试。下面我们一起看看需要做哪些设置。    其实要做的设置也不难,就是开启系统的调试功能。鉴于现在 Windows XP Service Pack 3 的支持周期还没有结束,我将讲解 XP 和 Windows 7 两个系统下的典型配置方式。(在这里,我们统一设置连接口为 COM1 口,波特率为115200)    对于 Windows XP,由于启动使用的是 boot.ini 数据,因此我们可以手动修改 C:oot.ini 文件(假设您的系统装在 C 盘),在像 multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional" /fastdetect 这样的启动项目后增加参数 /debug /debugport=com1 /baudrate=115200。当然,编辑 boot.ini 之前,您需要显示所有隐藏文件并且取消隐藏受保护的系统文件,而且还需清除该文件的只读属性。配置好的结果如下图所示(该记事本启用了自动换行,蓝色高亮部分其实在同一行):  除了直接编辑 boot.ini,还可以使用 msconfig 实用程序。启动 msconfig,切换到 BOOT.INI 选项卡,点击 高级 按钮,在弹出的对话框中进行如下配置后两次单击 确定 来退出 msconfig 即可:  或者,还有一种推荐的命令行方式来设置:    在 cmd 下键入并执行命令:bootcfg /debug ON /port COM1 /baud 115200 /ID 1  成功后会有如下提示:    这里的 /ID 开关用于决定对 boot.ini 中的哪一条启动项进行设置。可用的启动项可通过执行不带参数的 bootcfg 命令查看。更多自定义调试参数的方式请执行 bootcfg /debug /? 查询。    说到自定义调试参数,那我也得说说默认的调试参数:(默认调试参数即借助 /debug ON 参数单纯启用调试而没有配置调试口、波特率时的系统默认调试参数)  说完了 Windows XP 的配置,我们再来说说现行主流系统 Windows 7 的调试配置:    Windows Vista 和 Windows 7 下,就没有那么多的方法了。如果采用 Windows 自带的工具,就只能使用 bcdedit 命令了。Vista 之后,启动摒弃了 boot.ini 的方式,而是读取启动配置数据库。为了简化操作,我们可以使用默认调试配置,因此我们只需开启调试即可:    在以管理员身份运行的 cmd 下键入并执行命令:(每行一条命令)  bcdedit /bootdebug ON  bcdedit /debug ON    执行后得到的正确结果如下图所示:  您还可以通过执行 bcdedit /dbgsettings 命令来查看当前的调试参数设置。如果您要自定义调试参数,请执行命令 bcdedit /dbgsettings /? 获取帮助。    好了,做好了被调机的设置,我们还需做调试机的设置,这样才能进行调试。    由于条件所限,我只能使用我的笔记本计算机作为调试机,将安装在本机上的 Windows 7 家庭普通版虚拟机作为被调机,使用 NirSoft 的 StartBlueScreen 程序造成系统崩溃。  接着上面的步骤,此时我们刚刚配置完被调机 Windows 7 家庭普通版,并且尚未重启。我们接着应该运行调试机上面安装的 WinDbg,为了稍后能正确解析堆栈中的函数,我们首先应该点击 File – Symbol File Path…,填入 SRV*DownstreamStore*http://msdl.microsoft.com/download/symbols 后单击 OK(如果是平时调试您自己的程序,或者存有本地 Symbol,这里也可填写本地符号文件路径),然后选择 File – Kernel Debug…,在弹出的 Kernel Debugging 配置对话框中,我们选择 COM 选项卡,在 Baud Rate 里面填写 115200(与被调机调试参数匹配),然后单击 确定 即可。本来接下来就是连接零调制解调器线缆,随后重启被调机即可连上进行调试了,可是我们这里是虚拟演示,没有真实的零调制解调器线缆,我们再重启被调机之前、在确定 Kernel Debugging 配置对话框之前,我们还得做一些设置:(在此列举出来是为了方便有兴趣做一下本实验的人们 J)  u2022勾选 Pipe 使用命名管道连接  u2022勾选 Reconnect 确保在读/写错误发生时,WinDbg 自动断开并重连管道  u2022在 Port 字段填入命名管道名称(本例中笔者使用 \.pipeeric,具体用法在本文最后解释)  u2022激活被调机虚拟机窗口(以 Windows Virtual PC 为例),点击 工具 – 设置…, 在左栏选择 COM1(与被调机系统中设置的调试口一致),在右栏选择 命名管道 并在该字段填入与 WinDbg 里面一致的管道名称(本例是 \.pipeeric),然后 确定。  设置好了命名管道之后,我们在 WinDbg 的 Kernel Debugging 配置对话框中单击 确定。在询问是否 Save WorkSpace 的对话框中,我们选择 Yes。然后,WinDbg 就等待连接命名管道了。好了,后面的步骤就跟使用零调制解调器线缆连接的真实案例一样了。    接下来重启被调机。等待被调机重启并进入系统引导阶段后,WinDbg 会连上被调机并在 Waiting to reconnect… 状态下出现新的显示:  连上后,我们可以在任意阶段,于 WinDbg 内使用 Ctrl+Break 快捷键来中断被调机系统的运行,并配合相应命令进行即时分析。例如,就在这个启动阶段,我们使用 Ctrl+Break 快捷键来中断启动过程,我们可以看见启动过程的 UI 动画也随即停止:  如果要被调机继续运行,键入 g 并运行或者按下 F5 键即可。下面,我们就等待登录系统。登录系统后,我们使用提升权限的 cmd 运行 NirSoft 的系统崩溃软件来模拟一个平时我们见过的 0xc5 蓝屏,命令是 StartBlueScreen 0xc5 0 0 0 0。被调机蓝屏后,我们其实看不见以往的蓝屏,但是可以在 WinDbg 中立即看见捕获的信息,就跟分析内存转储文件一样,我们可以开始以往的分析工作了:  使用 !anaylze -v 命令,我们就可以定位出,造成蓝屏的驱动是 NirSoftBlueScreenDriver.sys。这个分析比较简单。但是值得注意的是,这个 bugcheck (即 0x000000C5)并不是系统像往常一样根据错误类型自动给出的,而是驱动 NirSoftBlueScreenDriver.sys 直接向 KeBugCheckEx 函数传递的参数,这个参数是笔者在利用 StartBlueScreen 程序时传递给程序的自定义参数,因此借助 StartBlueScreen 我们可以自定义蓝屏的五个参数。
2023-08-01 06:21:561

为什么win10不能安装windbg

WIN10是才出来的系统,许多软件都不兼容,希望能帮到你!
2023-08-01 06:23:042

windows dmp文件用什么打开

方法如下:  1、首先要下载安装Debugging Tools这个工具。  2、安装好了以后,在开始菜单下面的可以找得到一个【Debugging Tools for Windows (x86)】文件夹下面就会出现如下图所示:WinDbg点击进入。  3、运行WinDbg  4、在WinDbg中点击【File】-----【Open Crash Dump】选择.DMP文件打开。  5、在打开文件的时候会提示会打开一个工作区域是否在开启。点击【Yes】。
2023-08-01 06:23:121

windbg结果求帮助分析

首先,我们使用windbg打开dump文件。这时候如果直接输入!analyze -v ,得到的堆栈结果肯定是看不到想看的结果的。 其次,加载wow64exts模块,因为需要这个模块帮助把64位的dump,转换成32位的dump。输入 .load wow64exts 再次,进行转换。输入!sw 最后,按照分析32位dump文件的方法,分析这个dump。
2023-08-01 06:23:201

分析一下windbg 蓝屏代码

1、硬盘不稳定引起,此故障均为硬盘损坏,修复硬盘坏道或直接更换硬盘可解决。2、键鼠故障,重新插拔一下USB或多以USB导电窜线引起。3、机箱内灰尘多引起,清除灰尘(一般3-5个月清除一次)。卸下CPU风扇,轻轻擦去U上的硅脂,再重新涂上一薄层新硅脂。4、超频也可能引起蓝屏,如果超频了,就取消超频。5、电脑中病毒或木马也会蓝屏。可以用腾讯电脑管家进行查杀。
2023-08-01 06:23:281

电脑蓝屏 用windbg检测结果如图 看不懂这是什么意思 请高手指教

别看前面前面都是述说 后面是 ,蓝屏代码 比较重要0000000000 开始的代表的是蓝屏代码.sys 代表的是最后引起蓝屏的原因 系统文件错误,楼主这个蓝屏很好解决的,做个系统就可以解决,如正版系统,请用一键恢复
2023-08-01 06:23:374

如何过滤windbg的打印信息

在logcat里点选绿色的+,然后在“by Application Name:”里填入com.my.app就OK了。 它还有“by Log Tag”、“by Log Message”、“by PID”过滤条件。
2023-08-01 06:23:451

以下是windbg给出的蓝屏结论,烦请前辈一看。已经困扰我二个多月了,真心希望解决。先行感谢啦!

更新显卡驱动,或者用老版驱动
2023-08-01 06:24:062

老蓝屏怎么回事,这是windbg显示的

安装了不稳定的软件使电脑中毒等都会引起蓝屏,建议使用腾讯电脑管家来全盘杀毒,打开腾讯电脑管家--杀毒--全盘扫描--完成。应用腾讯自研第二代具有“自学习能力”的反病毒引擎“鹰眼”、具有占用资源少、轻巧、智能、精准的特性。
2023-08-01 06:25:165

Windbg设置了sympath,为什么还提示找不到symbol

1、不要用自定义的下载目录,一定要用C:Symbols这个目录名字,然后.reload重新加载符号目录。 2、再次重启windbg就可以了。 3、注意,32位程序最好用32位windbg调试,64位用64位windbg调试。
2023-08-01 06:25:301

win10蓝屏 windbg分析看不懂结果

电脑蓝屏的因素有太多了,只看代码也没办法准确判定的可以使用电脑管家,打开工具箱,有个电脑诊所,在里面直接找电脑蓝屏,然后就可以找到对应的解决办法了
2023-08-01 06:25:383

我电脑蓝屏了,用WinDbg分析出来了,请大家看看是什么问题引起的

从您的数据看,此问题是由Unknown_Image引起的,就是Probably caused by后面的那几个英文字母,可能是系统进程产生错误,但windows错误处理器无法捕获,其产生的原因很多,包括:硬件兼容性、有问题的启动程序或系统服务、或者是某些软件。 解决方案:请使用"事件查看器"获取更多的信息,从中发现错误根源。 第一步:检查碰盘空间如果在Windows安装过程中第一次出现此问题,可能是没有足够的硬盘空间来运行Windows。 第二步:BlOS不兼容。如果在windows安装过程中第一次重启后或在安装完成后出现此问题,可能是BlOS与Windows不兼容,请级到最新Bios。 第三步:存在不兼容的硬件驱动程序。如果STOP错误信息中列出了某驱动程序的名称,请禁用或删除该驱动程序。如果在启动过程中发生错误,则需要进入安全模式重命名或删除有问提的驱动程序。如果无法进入安全模式.则需要用安装光盘进入故障恢复控制台,然后对该文件进行重命名
2023-08-01 06:25:441

驱动调试中怎么样让windbg停在DriverEntry

一般说来,调速驱动程序分为两种:1.存在PDB文件的调试:这里的PDB文件其实就是调试符号文件,假如我们调试的这样的文件,我们可以再windbg中使用 :bp 驱动名!DriverEntry,这个时候当加载驱动的时候,程序就会断在入口了。2.没有PDB文件的调试:在调试别人的驱动程序时,也就是自己只有bin,并且在这个bin没有PDB文件,以及你没有它的代码。这种情况下,就出现问题了。好在我们可以查看SXE LD 驱动的名字.sys来下断,这个时候,只要加载驱动,马上就能别windbg识别,然后我们可以使用:lmvm 驱动名,查看驱动在内存的相关信息,利用得到的信息下断点。这个时候下的断点:bp base+poi(poi(base+3c)+base+28),这里poi是取值的意思。下边我以调试XueTr.sys的驱动作为说明:先设置好异常事件:2。运行后,触发了异常:3.查看XueTr.sys的相关信息,记录下起始地址,利用bp b22b9000+poi(poi(b22b9000+3c)+b22b9000+28)下断,断下后,即是驱动的入口了。
2023-08-01 06:25:521

电脑蓝屏用windbg查了一下,给这个代码;求懂行的解释下,具体文件信息在补充

你好你说的这种情况,一般都是由 系统软件、内存、硬盘引起的。1 电脑不心装上了恶意软件,或上网时产生了恶意程序,建议用360 卫士 、金山卫士等软件,清理垃圾,查杀恶意软件,完成后重启电脑,就可能解决。实在不行,重装,还原过系统,可以解决软件引起的问题。2 如果不能进入系统,可以开机后 到系统选择那里 按f8 选 起作用的最后一次正确配置(可以解决因驱动装错造成的错误)和带网络连接安全模式(进去后是有网络的,再用360软件弄下),可能就可以修复。 3 点 开始菜单 运行 输入 cmd 回车,在命令提示符下输入 for %1 in (%windir%system32*.dll) do regsvr32.exe /s %1 然后 回车。然后让他运行完,应该就可能解决。4 最近电脑中毒、安装了不稳定的软件、等,建议全盘杀毒,卸了那个引发问题的软件,重新安装其他 版本,就可能解决. 再不行,重新装过系统就ok.5 电脑机箱里面内存条进灰尘,拆开机箱,拆下内存条,清洁下内存金手指,重新装回去,就可能可以了。(cqjiangyong总结的,旧电脑经常出现这样的问题)6 电脑用久了内存坏、买到水货内存、多条内存一起用不兼容等,建议更换内存即可能解决。7 很多时候由于系统和显卡驱动的兼容性不好,也会出现这样的错误,建议你换个其他版本的显卡驱动安装,或换个其他版本的系统安装。8 电脑用久了,硬盘坏,重新分区安装系统可以修复逻辑坏道,还是不行,那就到了该换硬盘的时候了,换个硬盘就可以解决。硬件方面的问题,如果你不专业,建议拿到电脑店去测试,测试好了讲好价再换。希望能帮到你!!! 请踩最佳吧。.追问我的是笔记本 过年的时候才买的,联想Y470我也用过一键还原,但是还是出现蓝屏。驱动我也更新过,在联想官网下的。每次蓝屏的代码貌似都不同。 回答一键还原 ,后还蓝屏的话,是很大可能硬件问题哟.建议你找下售后以.
2023-08-01 06:26:003

windbg 查看内核函数 求助

首先你要配置好测试环境:参考VMware+Windgb+Win7 内核驱动调试在你的主机上配置Symbols配置sympath,C:UsersAdminDesktopfirstobjchk_win7_x86i386是你编译好的sys目录: SRV*C:Symbols*http://msdl.microsoft.com/download/symbols;C:UsersAdminDesktopfirstobjchk_win7_x86i386配置Source search path假设文件放在C:UsersAdminDesktopfirst]: C:UsersAdminDesktopfirst然后在命令行中输入:.reload打开源文件:Ctrl+O接着检查是否已经加载sys.dbg,命令为:kd> !lmi ndislwfLoaded Module Info: [nt]Module: ntoskrnl Base Address: 80a02000Symbol Type: PDB – Symbols loaded successfully from symbol server.d:DebugSymbols dislwf.pdbEC9B7590D1BB47A6A6D5383538C2B31A1 toskrnl.pdbCompiler: C – front end [13.10 bld 2179] – back end [13.10 bld 2190] Load Report: public symbolsd:DebugSymbols dislwf.pdbEC9B7590D1BB47A6A6D5383538C2B31A1 dislwf.pdb接着如果出现如上的结果,表明可以手动设置断点,否则(个人经验总是不能设置)。假设在ndislwf 的DriverEntry 设置断点。在启动驱动之前,中断在WinDbg的命令窗口,输入:bu ndislwf!DriverEntry接下来开始安装测试驱动。若执行到DriverEntry该函数,就会停下来,并且会在代码框中对应的代码中用红色标志,然后按F10可以单步调试。如果查看已经设置哪些断点:kd> bl0 e [d:winddk3790srcgeneralioctlsysfilter.c @ 123] 0001 (0001) ndislwf!DriverEntry1 e [d:winddk3790srcgeneralioctlsysfilter.c @ 338] 0001 (0001) ndislwf!SioctlDeviceControl+0×103注意两件事: 每个断点都有一个号码并且显示出断点状态,“e”是“enabled”,而“d”是“disabled”。假设你希望临时停止使用某个断点。bd (“Disable Breakpoint”) 将会完成它。你只需指定断点号码:kd> bd 1kd> bl0 e [d:winddk3790srcgeneralioctlsysfilter.c @ 123] 0001 (0001) ndislwf!DriverEntry1 d [d:winddk3790srcgeneralioctlsysfilter.c @ 338] 0001 (0001) ndislwf!SioctlDeviceControl+0×103 ·相似的方法,永久移除断点号码,使用bc 1 (“Clear Breakpoint”)。现在该断点将会从断点列表中消除。假设你希望临时停止使用某 个断点。bd (“Disable Breakpoint”) 将会完成它。你只需指定断点号码:kd> bd 1kd> bl0 e [d:winddk3790srcgeneralioctlsyssioctl.c @ 123] 0001 (0001) SIoctl!DriverEntry1 d [d:winddk3790srcgeneralioctlsyssioctl.c @ 338] 0001 (0001) SIoctl!SioctlDeviceControl+0×103· 相似的方法,永久移除断 点号码,使用bc 1 (“Clear Breakpoint”)。现在该断点将会从断点列表中消除。就先写这么写。怕到时候测试又忘记了。
2023-08-01 06:26:071

windbg使用方法

windbg使用方法是: 1、如果还没有安装过Windbg,首先要下载安装它。打开百度首页,搜索Windbg,点击高速下载,然后安装。 2、安装成功后,可以点击开始菜单,程序中找到并启动Windbg。 3、启动后主界面。 4、可以选择文件(File)菜单附加到一个进程。 5、在打开的列表中选择要调试的进程。 6、有的进程可能权限比较高,无法调试。 7、使用管理员身份运行Windbg。 8、再选择进程,附加进程。
2023-08-01 06:26:251

如何用windbg分析memory.dmp文件

在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试。在开发人员测试出现的bug,我们可以直接在本地进行调试。如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试,然是当程序在用户手中出现崩溃此时我们可以采用Remote Debugger进行调试,但是如果此时开发人员无法直接去用户现场调试,此时就需要用户生成DMP文件,以便开发人员使用DMP文件进行分析。本文主要介绍C++开发过程中出现程序崩溃后,如何进行分析定位bug(基于xp系统)。一、DMP文件获取设置(1)在运行窗口中输入 drwtsn32 -i ,并且点击确定WinDbg分析DMP文件方法完全攻略(2)在(1)确定后弹出如下对话框WinDbg分析DMP文件方法完全攻略(3)在(2)弹出的确定框后点击确定按钮完成,将Dr.Watson设置为默认应用程序调试程序。Dr.Watson系统自带的程序。(4)再次在运行窗口中输入:drwtsn32,如下图:WinDbg分析DMP文件方法完全攻略(5)点击确定按钮,在弹出的对话框中按照下列方式设置WinDbg分析DMP文件方法完全攻略(6) 点击确定按钮完成DMP文件设置。二、关闭Dr.Watson方法(1)打开注册表(2)在注册表中进入主键[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAeDebug],然后将“AUTO”键值设置为0如下图:WinDbg分析DMP文件方法完全攻略三、Windbg下载地址,下载完成后安装四、DMP文件获取(1) 用vs2010创建一个基于win32的程序,其源码如下:WinDbg分析DMP文件方法完全攻略(2)我们知道在学习C++中整数不能跟0进行除运算,否则会引起程序崩溃。而(1)中就是编写能触发0的异常,导致程序结束运行的程序。编译(1)中的程序,结果如下:WinDbg分析DMP文件方法完全攻略(3)运行(2)中test.exe程序 ,程序崩溃。如下图:WinDbg分析DMP文件方法完全攻略(4) 按照《一、DMP文件获取设置》步骤实现Dr.Watson设置为默认应用程序调试程序。(5)再次运行运行(2)中test.exe程序 如下图:WinDbg分析DMP文件方法完全攻略点击确定完成dmp文件的生成。(6)打开在(4)中设置dmp文件路径。(本例中默认地址为:C:Documents and SettingsAll UsersApplication DataMicrosoftDr Watson)如下图:WinDbg分析DMP文件方法完全攻略其中user.dmp就是我们需要的dmp文件。五、分析《四、DMP文件获取》中获取的DMP文件。
2023-08-01 06:26:361

windbg报异常 如何解决?

有两个方法,可以尝试一下:1)可以尝试添加路径,不要加入文件名;2)利用VC工具包中的editbin工具可以为程序文件增加校验;希望采纳
2023-08-01 06:26:441

如何使用WinDBG跟踪调试ASL/ACPI

在现代计算机中,硬件和固件(BIOS)都必须符合ACPI规范,以便操作系统可以控制所有模块的自动配置和电源管理。 使用WinDbg调试ACPI代码通常需要两台计算机,一台是目标机(Debuggee),另一台作为主机(Debugger)。下面就介绍一下怎么在两台机器上建立调试环境。1、配置调试Debuggee的连接方式Windbg支持COM、1394、USB2.0三种不同的连接方式,看到网上有些文章关于使用USB2.0来连接,需要购买特殊的USB调试线,而且价格不菲,本篇文章就不讨论了。笔记本电脑一般都没有COM端口,只好使用1394或是COM转USB,但在这里我只想讨论怎么使用COM端口来连接。启动到操作系统,使用bootcfg命令或直接使用文本编辑器修改boot.ini文件,指定调试使用的端口及参数。为了使用COM端口来调试,需要在启动参数中加入/debug参数,并指定/debugport和/baudrate子参数来作为启动项。下面这个boot.ini文件的第一个启动项就是配置使用COM端口。/debugport子参数指出使用Debuggee的哪个COM口,/baudrate指出连接的速度(默认是每秒19200位)。[boot loader]timeout=30default=multi(0)disk(0)rdisk(0)partition(1)/WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Debugging with Cable" /fastdetect /debug /debugport=COM1 /baudrate=57600multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional" /fastdetect下面的例子使用bootcfg命令设置第一个启动项使用COM1端口、波特率为115200。bootcfg的/debug开关打开,/port开关及/baud参数指出端口和速度,/ID开关指出修改的是第一个启动项。bootcfg /debug ON /port COM1 /baud 115200 /ID 1
2023-08-01 06:26:511

如何用WinDbg分析MEMORY.DMP文件

在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试。在开发人员测试出现的bug,我们可以直接在本地进行调试。如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试,然是当程序在用户手中出现崩溃此时我们可以采用Remote Debugger进行调试,但是如果此时开发人员无法直接去用户现场调试,此时就需要用户生成DMP文件,以便开发人员使用DMP文件进行分析。本文主要介绍C++开发过程中出现程序崩溃后,如何进行分析定位bug(基于xp系统)。一、DMP文件获取设置(1)在运行窗口中输入 drwtsn32 -i ,并且点击确定WinDbg分析DMP文件方法完全攻略(2)在(1)确定后弹出如下对话框WinDbg分析DMP文件方法完全攻略(3)在(2)弹出的确定框后点击确定按钮完成,将Dr.Watson设置为默认应用程序调试程序。Dr.Watson系统自带的程序。(4)再次在运行窗口中输入:drwtsn32,如下图:WinDbg分析DMP文件方法完全攻略(5)点击确定按钮,在弹出的对话框中按照下列方式设置WinDbg分析DMP文件方法完全攻略(6) 点击确定按钮完成DMP文件设置。二、关闭Dr.Watson方法(1)打开注册表(2)在注册表中进入主键[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAeDebug],然后将“AUTO”键值设置为0如下图:WinDbg分析DMP文件方法完全攻略三、Windbg下载,下载完成后安装四、DMP文件获取(1) 用vs2010创建一个基于win32的程序,其源码如下:WinDbg分析DMP文件方法完全攻略(2)我们知道在学习C++中整数不能跟0进行除运算,否则会引起程序崩溃。而(1)中就是编写能触发0的异常,导致程序结束运行的程序。编译(1)中的程序,结果如下:WinDbg分析DMP文件方法完全攻略(3)运行(2)中test.exe程序 ,程序崩溃。如下图:WinDbg分析DMP文件方法完全攻略(4) 按照《一、DMP文件获取设置》步骤实现Dr.Watson设置为默认应用程序调试程序。(5)再次运行运行(2)中test.exe程序 如下图:WinDbg分析DMP文件方法完全攻略点击确定完成dmp文件的生成。(6)打开在(4)中设置dmp文件路径。(本例中默认地址为:C:Documents and SettingsAll UsersApplication DataMicrosoftDr Watson)如下图:WinDbg分析DMP文件方法完全攻略其中user.dmp就是我们需要的dmp文件。五、分析《四、DMP文件获取》中获取的DMP文件。
2023-08-01 06:26:581

如何使用WinDBG跟踪调试ASL/ACPI

其实并不是只有在生成不了转储文件的情形下才能使用双机调试,在任何情况下都是可以使用的,尤其是调试内核问题时,双机调试不必限于转储文件类型,均可获得一切可以获得的信息,相当于完全内存转储了。而且,双机调试可以调试到系统启动阶段和
2023-08-01 06:27:062

我在使用winDbg解析蓝屏dump文件的时候出现以下信息,请大神帮忙看下这是哪里的问题,谢谢。

更多知识尽在华夏联盟开机马上按F8不动到高级选项出现在松手,选“最近一次的正确配置”回车修复,还不行按F8进入安全模式还原一下系统或重装系统(如果重装也是蓝屏,建议还是检修一下去)。出现这样的问题是软件冲突、驱动不合适、系统问题引起的,可以在安全模式还原一下系统,还是不行重新安装操作系统,不要安装软件、补丁、驱动等,看看开机还有问题吗?如果没有在逐步的安装驱动、补丁、软件,找出不合适的东西就不要安装了。请将你在蓝屏前电脑的表现,和你操作说的详细些。下载什么软件、补丁,升级了什么硬件了吗?详细的说说蓝屏前你做了什么,可能就是这些操作引起的蓝屏的发生,有问题请追问我(我跟据你提供的信息重新回答你)。1、蓝屏前【下载了什么软件、补丁、插件、驱动】等全部卸载试试,如果是驱动不合适,请下载驱动精灵升级驱动。2、如果电脑有木马,请下载Win清理助手、金山卫士、360急救箱查杀木马。3、如果不经常出现蓝屏关机在开机就可以了,还是不行,请开机按F8不动到高级选项出现在松手,选“最近一次的正确配置”回车修复,在不行还原一下系统或重装系统。4、如果是硬件问题引起的,或超频了硬件将BIOS电池放电(恢复BIOS出厂默认值)建议插拔一下显卡、内存等硬件,清理一下电脑里的卫生,并且擦亮显卡、内存的金手指(在测试一下硬件的温度是否过高)。5、电脑在光驱读盘时被非正常打开可以导致蓝屏,一般将光盘重新放入光驱即可。电脑在带电插拔某设备时可以导致蓝屏,重启一下电脑修复或按上面第三项修复。6、还有就是硬盘是否有问题,用系统自带的功能修复一下或下载软件修复硬盘坏道,或格式化硬盘重新分区重装系统,还是不行就需要换硬盘了。7、最近升级了硬件,这些硬件与系统不兼容,比如:内存、显卡等,请更换硬件试试(到升级硬件的地方更换合适为止)。8、如果是硬件问题引起的,自己又找不出问题所在,建议到维修那里检修一下。9、玩游戏蓝屏,一般是游戏本身的问题,电脑的配置与游戏有冲突,显卡、显卡驱动不合适,CPU、显卡的温度过高,内存太小等引起的,另外就是在玩游戏、看视频时,同时在干别的操作最容易蓝屏,因此在玩游戏、看视频时不要在操作别的东西了(看视频蓝屏问题同上)。
2023-08-01 06:27:141

Windows10电脑蓝屏DMP文件windbg结果求分析

一、升级DX时把system下的部分重要文件覆盖安装。二、检查机箱内线路是否松动,硬盘接口等以及显卡 网卡 声卡 内存等是否插紧。三、电源问题。由于劣质电源电压不稳定,非常有可能引起一系列的问题,比如无故死机重起 故障等现象,电源问题引起故障主要是因为电压不稳定,开机时间过长在显卡等一系列设备中形成一些脉冲电阻,在关机的时候计算机就会发现错误,所以引起故障!四、木马造成故障,可用腾讯电脑管家彻底查杀。五、腾讯电脑管家-工具箱-系统急救箱,或一键还原或重做系统。
2023-08-01 06:27:342

如何用windbg分析64位机上32位程序的dump文件

嘿嘿,接分
2023-08-01 06:27:412

windbg打开dmp文件报错?

报错:不支持此接口。
2023-08-01 06:27:492

vs添加过windbg的gflags调试,怎么取消

1. 必须在命令行中设置为要分析的进程打开用户堆栈信息:C:Program FilesDebugging Tools for Windows (x64)>gflags.exe -iYourDebugProcess.exe +ust2. 必须是Debug版本的进程3. 设置好windbg的pdb路径,即symbol path4. 利用windbg的AttachToProcess (貌似后面这个方案不行:在目标机器上产生转储文件(dump)然后用windbg分析)。5. 利用!heap命令示例:0:032> !heap -sNtGlobalFlag enables following debugging aids for new heaps:stack back tracesLFH Key : 0x00000052389f3a7eTermination on corruption : ENABLEDHeap Flags Reserv Commit Virt Free List UCR Virt Lock Fast(k) (k) (k) (k) length blocks cont. heap
2023-08-01 06:27:562

win7(32位 专业版)加载了一个有bug的PCIE驱动,导致蓝屏了,用windbg打开dmp文件后,结果什么都没有

更多知识尽在华夏联盟开机马上按F8不动到高级选项出现在松手,选“最近一次的正确配置”回车修复,还不行按F8进入安全模式还原一下系统或重装系统(如果重装也是蓝屏,建议还是检修一下去)。出现这样的问题是软件冲突、驱动不合适、系统问题引起的,可以在安全模式还原一下系统,还是不行重新安装操作系统,不要安装软件、补丁、驱动等,看看开机还有问题吗?如果没有在逐步的安装驱动、补丁、软件,找出不合适的东西就不要安装了。请将你在蓝屏前电脑的表现,和你操作说的详细些。下载什么软件、补丁,升级了什么硬件了吗?详细的说说蓝屏前你做了什么,可能就是这些操作引起的蓝屏的发生,有问题请追问我(我跟据你提供的信息重新回答你)。1、蓝屏前【下载了什么软件、补丁、插件、驱动】等全部卸载试试,如果是驱动不合适,请下载驱动精灵升级驱动。2、如果电脑有木马,请下载Win清理助手、金山卫士、360急救箱查杀木马。3、如果不经常出现蓝屏关机在开机就可以了,还是不行,请开机按F8不动到高级选项出现在松手,选“最近一次的正确配置”回车修复,在不行还原一下系统或重装系统。4、如果是硬件问题引起的,或超频了硬件将BIOS电池放电(恢复BIOS出厂默认值)建议插拔一下显卡、内存等硬件,清理一下电脑里的卫生,并且擦亮显卡、内存的金手指(在测试一下硬件的温度是否过高)。5、电脑在光驱读盘时被非正常打开可以导致蓝屏,一般将光盘重新放入光驱即可。电脑在带电插拔某设备时可以导致蓝屏,重启一下电脑修复或按上面第三项修复。6、还有就是硬盘是否有问题,用系统自带的功能修复一下或下载软件修复硬盘坏道,或格式化硬盘重新分区重装系统,还是不行就需要换硬盘了。7、最近升级了硬件,这些硬件与系统不兼容,比如:内存、显卡等,请更换硬件试试(到升级硬件的地方更换合适为止)。8、如果是硬件问题引起的,自己又找不出问题所在,建议到维修那里检修一下。9、玩游戏蓝屏,一般是游戏本身的问题,电脑的配置与游戏有冲突,显卡、显卡驱动不合适,CPU、显卡的温度过高,内存太小等引起的,另外就是在玩游戏、看视频时,同时在干别的操作最容易蓝屏,因此在玩游戏、看视频时不要在操作别的东西了(看视频蓝屏问题同上)。
2023-08-01 06:28:061

以下是windbg给出的蓝屏结论,烦请前辈一看。已经困扰我二个多月了,真心希望解决。先行感谢啦!

1)您的电脑蓝屏的时候,您在电脑干什么呢,能说说吗?我会跟据您说的较为准确的回答您。蓝屏代码或事件查看器里面的内容普通人是看不懂的,请将你在蓝屏前电脑的表现,和你操作说的详细些(我跟据你提供的信息重新回答你)。一般蓝屏是自己不正确操作引起的,记住容易引起蓝屏的操作不做。电脑不要满负荷操作,就是在玩游戏、看视频时、下载时、看网页的同时在干别的操作最容易死机、蓝屏,因此在玩游戏、看视频、下载时、看网页时不要在操作别的东西了。不管您在干什么,只要一有卡的迹象时就赶紧停止手头的操作退出在试,这样就不会蓝屏,如果还是这样就不要玩了或是不要看了。硬件方面:如果内存小请加内存条,硬盘是否有坏道,硬件是否不兼容或是故障,在用鲁大师测试一下CPU等硬件的温度是否高。2)如果您说的是开机蓝屏是与您关机前的不当操作有关系吧?比如:玩游戏、看视频、操作大的东西、使用电脑时间长造成的卡引起的吧?或下载了不合适的东西、或删除了系统文件、或断电关机等,故障不会无缘无故的发生吧?反复开关机试试,放一段时间试试,确实不可以就重装系统吧,如果自己重装不了,到维修那里找维修的人帮助您。只要注意自己的电脑不卡机、蓝屏、突然关机,开机就不会这样了。3)有问题请您追问我。蓝屏就是停止您操作的提示,其实蓝屏也是保护您电脑的措施,就和电脑到一定的高温是关机是一样的。90%的蓝屏是自己操作使用电脑不当引起的,卡是蓝屏发生的根源,容易引起卡的操作不做,就会避免蓝屏或少发生蓝屏。如果一看代码或系统日志或蓝屏DMP文件分析工具就可以准确知道问题在哪里谁都可以成为专家了,但是既使到微软网站搜索出来的答案也是让人摸不到头脑,我的实践是,解决电脑问题靠技术与实践,没有捷径的道路可走。
2023-08-01 06:28:141

如何用Windbg找到被catch住的C++的异常

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步。最新的一篇是:如何用Windbg找到被catch住的C++的异常。如何用Windbg找到被catch住的C++的异常标签:
2023-08-01 06:28:211

如何用windbg分析memory.dmp文件

本文主要介绍C++开发过程中出现程序崩溃后,如何进行分析定位bug(基于xp系统)。一、DMP文件获取设置(1)在运行窗口中输入 drwtsn32 -i ,并且点击确定WinDbg分析DMP文件方法完全攻略(2)在(1)确定后弹出如下对话框WinDbg分析DMP文件方法完全攻略(3)在(2)弹出的确定框后点击确定按钮完成,将Dr.Watson设置为默认应用程序调试程序。Dr.Watson系统自带的程序。(4)再次在运行窗口中输入:drwtsn32,如下图:WinDbg分析DMP文件方法完全攻略(5)点击确定按钮,在弹出的对话框中按照下列方式设置WinDbg分析DMP文件方法完全攻略(6) 点击确定按钮完成DMP文件设置。二、关闭Dr.Watson方法(1)打开注册表(2)在注册表中进入主键[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAeDebug],然后将“AUTO”键值设置为0如下图:WinDbg分析DMP文件方法完全攻略
2023-08-01 06:28:301