摘要:遇到一未找到必然出现条件的崩溃,不知道什么时候能触发崩溃,崩溃dump显示,试图访问了非法的内存或者写入了非法的内存此时如下两个函数就比较有用了:[cpp]view plaincopyBOOLWINAPIIsBadReadPtr(__inconstVOID*lp,__inUINT_PTRucb);B...
阅读全文
随笔分类 - 异常诊断与调试
摘要:感谢博主http://book.51cto.com/art/200711/59731.htm《Windows用户态程序高效排错》第二章主要介绍用户态调试相关的知识和工具。本文主要讲了排错的工具:调试器Windbg。第二章 汇编、异常、内存、同步和调试器——重要的知识点和神兵利器这一部分主要介绍用户态...
阅读全文
摘要:感谢博主http://book.51cto.com/art/200711/59874.htm2.2 读懂机器的语言:汇编,CPU执行指令的最小单元2.2.1 需要用汇编来排错的常见情况汇编是CPU执行指令的最小单元。下面一些情况下,汇编级别的分析通常是必要的:1. 阅读代码看不出问题,但是跑出来的结...
阅读全文
摘要:习惯了Vsiual Studio的兄弟们可能会因为先入为主的原因以为所有的调试器都应该像它那样,其实不然,当你安装Debugging Tools for Windows的时候,你将发现有两个系列的工具,一系列32位的工具和一系列64位的工具。这让人觉得和费解,因为在我们安装Microsoft Vis...
阅读全文
摘要:win32堆及内部结构Windows在创建一个新的进程时会为该进程创建第一个堆,被称为进程的默认堆。默认堆的句柄会被保存在进程环境块_PEB的ProcessHeap字段中。要获得_PEB的地址,可以通过$peb伪寄存器来获得,dt _PEB @$peb。也可以通过.process获得。如上图Proc...
阅读全文
摘要:Win32堆的调试支持为了帮助程序员及时发现堆中的问题,堆管理器提供了以下功能来辅助调试。1:堆尾检查(Heap Tail Check)HTC,在堆尾添加额外的标记信息,用于检测堆块是否溢出。2:释放检查(Heap Free Check)在释放堆块时进行检查,防止释放同一个堆块。3:参数检查,对...
阅读全文
摘要:必先利其器之一:使用PageHeap.EXE或GFlags.EXE检查内存越界错误Article last modified on 2002-6-3----------------------------------------------------------------The informat...
阅读全文
摘要:《Windows用户态程序高效排错》第二章主要介绍用户态调试相关的知识和工具。本文主要讲了PageHeap,调试Heap问题的工具.AD:51CTO学院:IT精品课程在线看!2.4.2 PageHeap,调试Heap问题的工具幸运的是,Heap Manager的确提供了主动检查错误的功能。只需要在注...
阅读全文
摘要:一、前言在前一段时间,我遭遇了一个现象诡异的Bug,最后原因归结为在DllMain里错误地调用了FreeLibrary(在本文最后对此Bug有详细的解释)。 MSDN里关于禁止在DllMain里调用LoadLibrary和FreeLibrary的解释过于含糊不清,所以我重温了一遍RussOsterl...
阅读全文
摘要:有没有碰到过程序启动就因为异常直接crash?有没有碰到程序启动之后什么反应也没有?有没有碰到过程序启动之后去触发另一个进程失败?有没有碰到别人的程序调用了你的代码,出现问题以后,让你来调查,而你只有你的源代码,该怎么办? 碰过这样的问题,应该都会很头疼吧,如何诊断问题呢?最简单的当然是Debug...
阅读全文
摘要:作为程序员,我们平时最担心见到的事情是什么?是内存泄漏?是界面不好看?……错啦!我相信我的看法是不会有人反对的——那就是,程序发生了崩溃!“该程序执行了非法操作,即将关闭。请与你的软件供应商联系。”,呵呵,这句 M$ 的“名言”,恐怕就是程序员最担心见到的东西了。有的时候,自己的程序在自己的机器上运...
阅读全文
摘要:程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件。 步骤:1) 打开WinDBG并将之Attach 到crash的程序进程2) 输入产生dump 文件的命令WinDBG产生dump 文件的命令是 .dum...
阅读全文
摘要:1、生成dmp的程序#include#pragmacomment(lib, "dbghelp.lib")//设置异常处理回调函数SetUnhandledExceptionFilter(UnhandledExceptionFilter);//异常处理代码//EXCEPTION_EXECUTE_HAND...
阅读全文
摘要:前言:在C++实际开发过程中,开发出来的程序,一般情况下由开发人员进行单元测试,然后移交给测试人员进行测试。在开发人员测试出现的bug,我们可以直接在本地进行调试。如果测试人员测试出崩溃级别的bug,如果我们需要调试往往借助于vs提供的Remote Debugger工具进行远程调试(关于vs2010...
阅读全文
摘要:srv*C:/symbol*http://msdl.microsoft.com/download/symbols;D:\Desktop\CMS_Dumpsymck //检查pdblm //显示pdb//写入日志文件.logopen d:\output.txt.logclose.logfile!h...
阅读全文
摘要:参考链接:http://wenku.baidu.com/view/4e58744dcf84b9d528ea7a42.html
阅读全文
摘要:Windbg抓取程序崩溃的dmp文件的方法一、 简介windbg是在windows平台下,强大的用户态和内核态调试工具。相比较于Visual Studio,它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大。它的另外一个用途是可以用来分析dump数据。我们使用windbg的主要用途是来抓取IE崩溃产生的dmp文件,然后可以查看是哪个模块导致崩溃,从而协助开发判断分析问题所在。二、 使用方法设置WinDbg抓取环境。WinDbg解压到任意盘符,例如C盘,使用下面的参数抓取Dump。C:\WinDbg\Windbg.exe –I运行该参数时,WinDb
阅读全文
摘要:NetRochttp://www.DbgTech.net引子Debugging Tools for Windows是微软发布的一套用于软件调试的工具包(后面如果没有指明,那么我会使用WinDbg来作为这一套调试工具的简称)。我第一次接触是在三年前的一个内核驱动项目,由于进行了IDT中键盘鼠标中断的Hook,使用Softice调试时造成会造成影响,只得使用WinDbg通过串口进行双机调试。自此之后这个Windows平台下最为强大的调试工具一直是开发过程中的必备。这里我毫不掩饰的说"最强",可能很多通过逆向工作而接触调试的朋友不会认同,但是我相信随着对WinDbg了解的加深,以
阅读全文
摘要:使用代码手工生成dmp文件SetUnhandledExceptionFilter为每个线程设置SetUnhandledExceptionFilter(MyCallBack),(必须在每个线程中启动时调用一次,否则造成无法进入回调函数中)这样该线程中发现未处理的SEH异常时就会进入到MyCallBack 回调中.无聊的是虽然MyCallBack 的参数是SEH异常的结构体指针,但C++异常也会进入到MyCallBack 中.所以只要SetUnhandledExceptionFilter 就能抓到C++的异常了.按C++标准,未处理的C++异常应当是触发unexpected.而MS 放出话说它的编
阅读全文
摘要:之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的!如果光要是这个内存地址,估计你会疯掉~~所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0,下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,源代码如下:MiniDump.hMiniDump.cpp1、在CXXDlg::OnInitDialog()中添加这样一段:BOOL CTestDlg::OnInitDialog(){ CDialog::OnInitDialog(); // ...... SetUnhandledExceptionFilter(CrashReportE...
阅读全文