2019年8月22日

Windbg的命令

摘要: 前面介绍了Windbg的UI功能,也基本上能完成基本的调试任务,但是WinDBG主要是以命令方式工作的,这些命令在Command Window里输入。WinDBG共支持三类命令:标准命令、元命令和扩展命令。某些命令仅在实时调试中可用,其他命令仅在调试转储文件时可用。某些命令仅在用户模式调试期间可用, 阅读全文

posted @ 2019-08-22 17:01 活着的虫子 阅读(1193) 评论(0) 推荐(0) 编辑

选择32位或64位调试工具

摘要: 安装Windows调试工具时,您将同时获得32位工具集和64位工具集。如下图 如果使用的是Microsoft Visual Studio调试环境,则无需考虑是否使用32位或64位,因为Visual Studio会自动选择正确的调试工具。如果您使用的是其他调试环境(windbg、kd、cdb或ntsd 阅读全文

posted @ 2019-08-22 14:43 活着的虫子 阅读(776) 评论(0) 推荐(0) 编辑

Windbg的主题---Theme

摘要: 主题是预配置的windbg工作区,其中包含调试信息窗口的有用配置。任何主题都可以保存为基本工作区。Windows调试工具包中的主题作为一组注册表文件(扩展名为.reg)提供。当您积累更多的调试会话时,会自动设置各种默认工作区。这些默认工作区使用基本工作区作为起点。有关默认工作区的详细信息,请参见Wi 阅读全文

posted @ 2019-08-22 11:06 活着的虫子 阅读(933) 评论(0) 推荐(1) 编辑

WinDbg的工作空间---Work Space

摘要: 一、什么是工作空间 Windbg把和调试相关的所有配置称为workspace。WinDbg使用工作空间来描述和存储调试项目的属性、参数及调试器设置等信息。工作空间与vc中的项目文件很相似。退出windbg时,它会将会话配置保存在工作区中。工作区使您能够轻松地保留从一个会话到另一个会话的设置。您还可以 阅读全文

posted @ 2019-08-22 09:42 活着的虫子 阅读(1313) 评论(0) 推荐(0) 编辑

2019年8月21日

WinDbg 图形界面功能(四)

摘要: 二、工具栏 除了断点按钮在工具栏上的每个按钮相当于菜单命令。 每个按钮的效果的完整说明,请参阅相应的菜单命令的页。 在工具栏上的按钮具有以下效果。 打开源文件为只读的文件。 等效于文件 |打开源文件。 从活动窗口中删除所选的文本并将其放到剪贴板上。 等效于编辑 |剪切。 将所选的文本从活动窗口复制到 阅读全文

posted @ 2019-08-21 16:02 活着的虫子 阅读(498) 评论(0) 推荐(0) 编辑

WinDbg 图形界面功能(三)

摘要: 1.4、调试菜单 调试相关操作的功能菜单在这个下面,比如单步执行等。 Go 单击Go调试菜单恢复 (或开始) 在目标上的执行。 此执行将继续,直到抵达某个断点、 异常或事件发生时,该过程结束或调试器将中断目标。此命令相当于按 F5 或单击 (F5) 转按钮 () 工具栏上。 转到未经处理异常单击转未 阅读全文

posted @ 2019-08-21 15:56 活着的虫子 阅读(633) 评论(0) 推荐(0) 编辑

WinDbg 图形界面功能(二)

摘要: 1.2、编辑菜单 这个菜单可以提供Windbg里的各功能窗口的可选文本的编辑功能,比如源代码窗口、命令窗口等提供选择、复制、剪切和黏贴等基础编辑功能。 剪切 单击剪切上编辑菜单中,删除所选的任何文本并将其移动到剪贴板。此命令是等效于按下 CTRL + X 或 SHIFT + DELETE,或单击剪切 阅读全文

posted @ 2019-08-21 14:44 活着的虫子 阅读(865) 评论(0) 推荐(0) 编辑

WinDbg 图形界面功能(一)

摘要: 当我们启动windbg后,我们就能看到Windbg的样子了,如下: 本部分讨论 WinDbg 图形用户界面的元素。 这些元素包括以下各项:菜单、工具栏和快捷键。菜单有:文件菜单、编辑菜单、视图菜单、调试菜单、窗口菜单、帮助菜单。下面分别一 一简单介绍下。 一、菜单 1.1、文件菜单 打开源文件加载特 阅读全文

posted @ 2019-08-21 11:39 活着的虫子 阅读(2000) 评论(0) 推荐(0) 编辑

2019年8月20日

WinDbg的安装、配置和功能

摘要: 一、WinDbg简介 WinDbg是微软发布的一款免费而十分强大的调试工具。既然是微软自己发布的调试工具,那它对微软产品的调试当然是十分的强大。Windows 调试器 (WinDbg) 可用于调试内核模式和用户模式代码,来分析故障转储,并检查代码时 CPU 寄存器执行,同时也是一款相当优秀的源码级( 阅读全文

posted @ 2019-08-20 17:31 活着的虫子 阅读(20453) 评论(2) 推荐(8) 编辑

2019年8月19日

windbg调试托管代码 .Net clr

摘要: 现在很多的程序都是多语言混合编程的,比如我司的产品,就是用C++/.net clr混合编制的。那么当我们调试这样的程序时,一定要注意,比如有时我们只看到c++的栈和名称,而.net clr的代码确看不到。比如 那要怎样才能看到.net clr的代码和栈呢,下面简单讲一下。 一、SOS.DLL SOS 阅读全文

posted @ 2019-08-19 15:58 活着的虫子 阅读(1639) 评论(0) 推荐(2) 编辑

2019年8月17日

调试案例---一次真实的栈溢出

该文被密码保护。 阅读全文

posted @ 2019-08-17 14:18 活着的虫子 阅读(2) 评论(0) 推荐(0) 编辑

win32线程栈溢出问题 (二)

摘要: 3.2、函数递归调用引发的栈溢出 写一段最简单的无穷递归代码,如下: 在VS编译,Debug模式下运行之,结果报错 观察下调用栈,发现栈没有破坏,但被大量的f()调用沾满,如下: 这也充分说明了,是递归调用引起了栈溢出 转到汇编,在地址栏里输入上面错误框里的地址0x011515C9 可以看到,程序是 阅读全文

posted @ 2019-08-17 13:55 活着的虫子 阅读(477) 评论(0) 推荐(0) 编辑

2019年8月16日

win32线程栈溢出问题 (一)

摘要: 一、什么是线程栈溢出 我们都知道,每一个win32线程都会开辟一个空间,用来临时存储线程执行时所调用的一系列函数的参数、返回地址和局部变量及其他上下文信息。这个空间就是线程的栈区。栈区的容量是有限的,在程序编译链接时,就固定下来了。通过VC++编译的程序,默认的栈区大小是1MB。当我们程序执行时,访 阅读全文

posted @ 2019-08-16 00:31 活着的虫子 阅读(1777) 评论(0) 推荐(0) 编辑

2019年8月15日

WinDbg常用命令系列---查看线程调用栈命令K*简介

摘要: Windbg里的K*命令显示给定线程的堆栈帧以及相关信息,对于我们调试时,进行调用栈回溯有很大的帮助。 一、K*命令使用方式 在不同平台上,K*命令的使用组合如下 User-Mode, x86 Processor Kernel-Mode, x86 Processor User-Mode, x64 P 阅读全文

posted @ 2019-08-15 14:25 活着的虫子 阅读(8932) 评论(0) 推荐(0) 编辑

2019年8月10日

BCD码

摘要: BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧最常用于会计系统的设计 阅读全文

posted @ 2019-08-10 13:52 活着的虫子 阅读(2300) 评论(0) 推荐(0) 编辑

Intel 80386 CPU

摘要: 一、80386 概述 80386处理器被广泛应用在1980年代中期到1990年代中期的IBM PC相容机中。这些PC机称为「80386电脑」或「386电脑」,有时也简称「80386」或「386」。80386的广泛应用,将PC机从16位时代带入了32位时代。80386的强大运算能力也使PC机的应用领域 阅读全文

posted @ 2019-08-10 10:56 活着的虫子 阅读(6562) 评论(0) 推荐(1) 编辑

2019年8月9日

Intel 80286 CPU

摘要: 一、80286概述 INTEL 1982年推出80286芯片,该芯片相比8086和8088有了飞跃式发展,虽然它仍是16位结构,但在CPU内部含有13.4万个晶体管,时钟频率由最初6MHz逐步提高到20MHz。内部和外部数据总线皆为16位,地址总线24位,可寻址内存大小达到16Mb。80286兼容了 阅读全文

posted @ 2019-08-09 15:23 活着的虫子 阅读(3178) 评论(0) 推荐(0) 编辑

2019年8月8日

Intel 8086 CPU

摘要: 一、8086概述 Intel8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供64K8位元的输出输入(或32K16位元),以及固定的向量中断。大部分的指令只能够存取一个 阅读全文

posted @ 2019-08-08 16:32 活着的虫子 阅读(4121) 评论(0) 推荐(0) 编辑

2019年7月31日

浮点数的运算步骤

摘要: 浮点数的加减运算一般由以下五个步骤完成:对阶、尾数运算、规格化、舍入处理、溢出判断 一、对阶 所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够进行加减运算。因为,当进行M x·2Ex与M y·2Ey加减运算时,只有使两浮点数的指数值部分相同,才能将相同的指数值 阅读全文

posted @ 2019-07-31 18:39 活着的虫子 阅读(28128) 评论(4) 推荐(2) 编辑

2019年7月25日

C++异常处理机制

摘要: 异常处理是C++的一项语言机制,用于在程序中处理异常事件。异常事件在C++中表示为异常对象。异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统为程序设置当前异常对象,然后执行程序的当前异常处理代码块,在包含了异常出现点的最内层的try块,依次匹配catch语句中 阅读全文

posted @ 2019-07-25 18:49 活着的虫子 阅读(4636) 评论(0) 推荐(0) 编辑

2019年7月24日

结构化异常SEH处理机制详细介绍(二)

摘要: 本文将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型。SEH实际包含两个主要功能:结束处理(termination handling)和异常处理(exception handling)。每当你建立一个tr 阅读全文

posted @ 2019-07-24 16:10 活着的虫子 阅读(1053) 评论(0) 推荐(0) 编辑

2019年7月23日

结构化异常SEH处理机制详细介绍(一)

摘要: 结构化异常处理(SEH)是Windows操作系统提供的强大异常处理功能。而Visual C++中的__try{}/__finally{}和__try{}/__except{}结构本质上是对Windows提供的SEH的封装。 一、分类 Per-Thread类型SEH(也称为线程异常处理),用来监视某线 阅读全文

posted @ 2019-07-23 19:47 活着的虫子 阅读(9333) 评论(1) 推荐(3) 编辑

Windows异常的分发处理流程

摘要: 根据异常来源,一般分硬件异常和软件异常,它们处理的流程大致一样,下面简单讲一下。 如果是硬件异常,CPU会根据中断类型号转而执行对应的中断处理程序。CPU会在IDT中查找对应的函数来处理,各个异常处理函数不仅仅处理异常还需要将异常信息封装,以便对后续处理,KiTrapXX例程在完成针对本异常的特别动 阅读全文

posted @ 2019-07-23 15:08 活着的虫子 阅读(1991) 评论(1) 推荐(1) 编辑

2019年7月22日

Windows异常处理机制简介

摘要: windows系统里,为了保证系统内核的强壮和稳定,为了保证用户程序的强壮和稳定,提供了异常处理机制,来帮助程序员和系统使用人员处理异常。简单来说,当CPU执行代码时,发生异常,会把异常告知操作系统,操作系统首先会让程序自身处理这个异常,程序自身有能力(程序中注册的有异常处理函数)处理,程序就继续运 阅读全文

posted @ 2019-07-22 15:40 活着的虫子 阅读(1532) 评论(0) 推荐(0) 编辑

2019年7月20日

Windows异常

摘要: 一、什么是异常 异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的。简单来说异常就是对于非预期状况的处理,当我们在运行某个程序时出现了异常状况,就会进入异常处理流程。 二、异常分类 根据异常来源分,可以分为如下两种异常: 硬件异常硬件异常是由cpu产生,其中硬 阅读全文

posted @ 2019-07-20 15:35 活着的虫子 阅读(653) 评论(0) 推荐(0) 编辑

Windows异常相关数据结构

摘要: 当一个异常发生时,操作系统要向引起异常的线程的栈里压入三个结构,这三个结构是: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 _ 阅读全文

posted @ 2019-07-20 14:05 活着的虫子 阅读(807) 评论(0) 推荐(0) 编辑

2019年7月18日

PDB符号文件浏览工具介绍

摘要: 一、SymView SymView工具用来显示符号文件中包含的符号表和符号数据。目前支持微软的Visual C/C++和C#编译器产生的DBG格式的符号文件和PDB格式的符号文件。 SymView提供了以下多种方式来查看或者搜索符号文件的内容: 符号表 PDB或DBG文件中可以包含6种符号表,分别为 阅读全文

posted @ 2019-07-18 16:56 活着的虫子 阅读(2854) 评论(0) 推荐(0) 编辑

PDB符号文件

摘要: 一、什么是PDB文件 PDB(Program DataBase),全称为“程序数据库”文件。存储程序的所有调试信息数据。在编译连接时,如果选择了/debug选项或/debug:full选项,则最新的Microsoft链接器在链接时创建程序数据库(PDB)文件。pdb文件包含有关可执行文件创建的信息, 阅读全文

posted @ 2019-07-18 14:32 活着的虫子 阅读(2649) 评论(0) 推荐(0) 编辑

2019年7月17日

调试信息

摘要: 一、什么是调试信息 调试信息即是符号,用于配合帮助调试器分析调试被调试程序的布局,因此调试信息能够帮助调试器定位变量、函数地址,显示变量的值(包括结构体以及类等复杂的结构),并且能够将地址映射到源代码的行。 二、调试信息分类 公开函数和变量描述跨编译单元的可见函数何变量,调度信息存储其位置和名字 私 阅读全文

posted @ 2019-07-17 15:29 活着的虫子 阅读(726) 评论(0) 推荐(0) 编辑

2019年7月16日

符号文件是如何工作的

摘要: 我们知道符号文件对我们调试是非常重要的,如果没有符号文件,我们在调试器里看到的要么是偏移地址,要么看到的是错误符号,这会导致我们定不了位或错误定位,如果有了匹配的符号文件,这一切都不是问题了。 一、调试器寻找符号文件 首先在我们编译我们的程序时,如果设置了符号选项,那么在编译连接时,除了产生我们需要 阅读全文

posted @ 2019-07-16 14:59 活着的虫子 阅读(914) 评论(0) 推荐(0) 编辑

2019年7月15日

认识符号文件

摘要: 一、什么是符号文件 符号文件(Symbol Files)是一个数据信息文件,它包含了应用程序二进制文件(比如:EXE、DLL等)调试信息,专门用来作调试之用,最终生成的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这个文件中。所以调试应用程序时,这个文件是非常重要的。用 阅读全文

posted @ 2019-07-15 19:32 活着的虫子 阅读(1010) 评论(2) 推荐(1) 编辑

2019年7月13日

字符编码

摘要: 一、什么是字符 字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符是电子计算机或无线电通信中字母、数字、符号的统称。是计算机中经常用到的二进制编码形式,也是计算机中最常用到的信息形式。 二、字符集 不同民族、地区或系统使用不同的符号代表着相同不同的意义。对 阅读全文

posted @ 2019-07-13 14:32 活着的虫子 阅读(423) 评论(0) 推荐(0) 编辑

模和同余定理

摘要: 一、什么是余数 在整数的除法中,只有能整除与不能整除两种情况。当不能整除时,就产生余数。我们在读小学二年级时,已经学了带余数的出发了,我们来温习一下。 通过做了这么多年除法,我们可以理解到,余数是指整数除法中被除数未被除尽部分,且余数的取值范围为0到除数之间(不包括除数)的整数,也就是说余数一定比除 阅读全文

posted @ 2019-07-13 10:49 活着的虫子 阅读(3538) 评论(0) 推荐(1) 编辑

2019年7月12日

数的编码

摘要: 一、机器数 就是将数学里实数系的数在计算机里的二进制表现形式称为机器数。在数学里,数有正负之分,正数前面加个(+)这个符号来表示(一般不加),负数前面一定要加上符号(-)来表示,比如2位10进制数正10可以表示位+10,负10表示为-10。我们可以看到,当加上符号后,由2位数变成了3位数,加了一个符 阅读全文

posted @ 2019-07-12 15:44 活着的虫子 阅读(1301) 评论(0) 推荐(0) 编辑

2019年7月10日

Win32 Error Code COM Error Code NTSTATUS的区别、转换

摘要: 这三种码其实都是Windows系统错误码,只是对应不同API和使用场景。它们既有区别,又相互有联系。 一、区别和联系 都是32位值 Win32 Error Code和NTSTATUS位域组成相同,但Win32 Error Code的取值范围只能在0x00000000 0x0000FFFF Win32 阅读全文

posted @ 2019-07-10 19:28 活着的虫子 阅读(1237) 评论(0) 推荐(0) 编辑

Error Codes Messages查找工具介绍

摘要: 当我们通过各种手段获取到一个Windows错误码后,如何获取对应的错误消息呢?有两种方法:一是用编程的手段(FormatMessage);其二是用现成的工具。第一种方法一般在我们编码的时候有用,而更多情况下我们进行调试得到了错误码,不可能还要先写一段代码,而是直接用工具去快速获取了。 一、VS自带工 阅读全文

posted @ 2019-07-10 17:18 活着的虫子 阅读(862) 评论(0) 推荐(1) 编辑

NTSTATUS

摘要: 一、NTSTATUS 直译就是NT状态,也就是内核状态。主要是内核开发/驱动开发用到的API返回的状态。许多内核模式的标准驱动程序例程和驱动程序支持例程使用ntstatus类型作为返回值。此外,当完成IRP时,驱动程序在IRP的IO状态块结构中提供一个ntstatus类型的值。 ntstatus值分 阅读全文

posted @ 2019-07-10 14:21 活着的虫子 阅读(3693) 评论(0) 推荐(0) 编辑

COM Error Code(HRESULT)部分摘录

摘要: Return value/code Description 0x00030200 STG_S_CONVERTED The underlying file was converted to compound file format. 0x00030201 STG_S_BLOCK The storage 阅读全文

posted @ 2019-07-10 11:20 活着的虫子 阅读(3768) 评论(0) 推荐(0) 编辑

2019年7月9日

COM Error---HRESULT

摘要: 一、COM Error 调用COM接口产生的错误。几乎所有的COM函数和接口方法都返回类型为HRESULT的值。HRESULT(用于结果句柄)是返回成功、警告和错误值的一种方法。HRESULTs实际上不是任何事物的句柄;它们只是值中有几个字段编码的值。根据COM规范,结果为零表示成功,非零表示失败。 阅读全文

posted @ 2019-07-09 19:09 活着的虫子 阅读(740) 评论(0) 推荐(0) 编辑

Win32 Error

摘要: 一、Win32错误 也就是Win32子系统产生的错误。当我们在自己的代码里调用Windows系统的API函数,系统执行API内部代码,当API内部代码出现错误,会将预先定义好的错误代码写到调用这个API的线程局部存储区域(这个区域是每个线程独有的其他线程无法更改。它存储着一些线程独有的东西),然后A 阅读全文

posted @ 2019-07-09 17:08 活着的虫子 阅读(2811) 评论(0) 推荐(1) 编辑

导航