摘要:一、什么是异常 异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的。简单来说异常就是对于非预期状况的处理,当我们在运行某个程序时出现了异常状况,就会进入异常处理流程。 二、异常分类 根据异常来源分,可以分为如下两种异常: 硬件异常硬件异常是由cpu产生,其中硬
阅读全文
摘要:当一个异常发生时,操作系统要向引起异常的线程的栈里压入三个结构,这三个结构是:E X C E P T I O N _ R E C O R D结构、C O N T E X T结构和E X C E P T I O N _ P O I N T E R S结构。 一、E X C E P T I O N _
阅读全文
摘要:一、SymView SymView工具用来显示符号文件中包含的符号表和符号数据。目前支持微软的Visual C/C++和C#编译器产生的DBG格式的符号文件和PDB格式的符号文件。 SymView提供了以下多种方式来查看或者搜索符号文件的内容: 符号表 PDB或DBG文件中可以包含6种符号表,分别为
阅读全文
摘要:一、什么是PDB文件 PDB(Program DataBase),全称为“程序数据库”文件。存储程序的所有调试信息数据。在编译连接时,如果选择了/debug选项或/debug:full选项,则最新的Microsoft链接器在链接时创建程序数据库(PDB)文件。pdb文件包含有关可执行文件创建的信息,
阅读全文
摘要:一、什么是调试信息 调试信息即是符号,用于配合帮助调试器分析调试被调试程序的布局,因此调试信息能够帮助调试器定位变量、函数地址,显示变量的值(包括结构体以及类等复杂的结构),并且能够将地址映射到源代码的行。 二、调试信息分类 公开函数和变量描述跨编译单元的可见函数何变量,调度信息存储其位置和名字 私
阅读全文
摘要:我们知道符号文件对我们调试是非常重要的,如果没有符号文件,我们在调试器里看到的要么是偏移地址,要么看到的是错误符号,这会导致我们定不了位或错误定位,如果有了匹配的符号文件,这一切都不是问题了。 一、调试器寻找符号文件 首先在我们编译我们的程序时,如果设置了符号选项,那么在编译连接时,除了产生我们需要
阅读全文
摘要:一、什么是符号文件 符号文件(Symbol Files)是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试信息,专门用来作调试之用,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这个文件中。所以调试应用程序时,这个文件是非常重要的。用
阅读全文
摘要:这三种码其实都是Windows系统错误码,只是对应不同API和使用场景。它们既有区别,又相互有联系。 一、区别和联系 都是32位值 Win32 Error Code和NTSTATUS位域组成相同,但Win32 Error Code的取值范围只能在0x00000000 0x0000FFFF Win32
阅读全文
摘要:当我们通过各种手段获取到一个Windows错误码后,如何获取对应的错误消息呢?有两种方法:一是用编程的手段(FormatMessage);其二是用现成的工具。第一种方法一般在我们编码的时候有用,而更多情况下我们进行调试得到了错误码,不可能还要先写一段代码,而是直接用工具去快速获取了。 一、VS自带工
阅读全文
摘要:一、NTSTATUS 直译就是NT状态,也就是内核状态。主要是内核开发/驱动开发用到的API返回的状态。许多内核模式的标准驱动程序例程和驱动程序支持例程使用ntstatus类型作为返回值。此外,当完成IRP时,驱动程序在IRP的IO状态块结构中提供一个ntstatus类型的值。 ntstatus值分
阅读全文
摘要:Return value/code Description 0x00030200 STG_S_CONVERTED The underlying file was converted to compound file format. 0x00030201 STG_S_BLOCK The storage
阅读全文
摘要:一、COM Error 调用COM接口产生的错误。几乎所有的COM函数和接口方法都返回类型为HRESULT的值。HRESULT(用于结果句柄)是返回成功、警告和错误值的一种方法。HRESULTs实际上不是任何事物的句柄;它们只是值中有几个字段编码的值。根据COM规范,结果为零表示成功,非零表示失败。
阅读全文
摘要:一、Win32错误 也就是Win32子系统产生的错误。当我们在自己的代码里调用Windows系统的API函数,系统执行API内部代码,当API内部代码出现错误,会将预先定义好的错误代码写到调用这个API的线程局部存储区域(这个区域是每个线程独有的其他线程无法更改。它存储着一些线程独有的东西),然后A
阅读全文
摘要:Windows API 错误代码定义在winerror.h里,当我们得到一个Error Code不知其意时,可以查阅这个文件 这里定义了绝大部分的错误,摘录翻译如下 〖0〗-操作成功完成。 〖1〗-功能错误。 〖2〗-系统找不到指定的文件。 〖3〗-系统找不到指定的路径。 〖4〗-系统无法打开文件。
阅读全文
摘要:我们已经了解了什么是Dump文件,它保存了什么数据,有什么作用,但它是如何存储的,数据格式是怎样的呢。下面简单说一下。 一、总体结构 二、文件头 首先文件的最开始的32个字节是Dump文件的文件头,这里包含了Dump文件标识、格式版本、校验和、时间戳和一些标志,数据结构如下 typedef stru
阅读全文
摘要:一、Windows系统的任务管理器里抓dump 启动任务管理器,选中某个进程,右键,弹出菜单"创建转储文件" 注意事项: 当你在64位Windows系统上抓32位进程的dmup文件时,如果用的是64位任务管理器,那么在用Windbg加载后,要用!wow64exts.sw切换到X86模式下,如果不想做
阅读全文
摘要:一、什么是Dump文件 又叫内存转储文件或者叫内存快照文件。是一个进程或系统在某一给定的时间的快照。比如在进程崩溃时或则进程有其他问题时,甚至是任何时候,我们都可以通过工具将系统或某进程的内存备份出来供调试分析用。dump文件中包含了程序运行的模块信息、线程信息、堆栈调用信息、异常信息等数据。 二、
阅读全文
摘要:00000000 STATUS_SUCCESS00000000 STATUS_WAIT_000000001 STATUS_WAIT_100000002 STATUS_WAIT_200000003 STATUS_WAIT_30000003F STATUS_WAIT_6300000080 STATUS_
阅读全文
摘要:当我们进行程序调试时,有时调试器会直接告诉你符号文件不对,或则显示出的调用栈不对,当你怀疑符号文件不匹配时,如何确定呢? 如果是用windbg调试,请用 !chksym 模块名比如,匹配的时候 不匹配的时候 静态检查 symchk.exe例用Windows调试工具集里的工具symchk.exe sy
阅读全文