软件调试
文章平均质量分 64
pokeyode
这个作者很懒,什么都没留下…
展开
-
中断和异常
def:由CPU外部引发的使CPU停下当前的任务,转而去执行其他任务的情况称为中断。中断常由外部的硬件引发,由中断控制器控制。def:由CPU内部的状态或执行的指令导致CPU停下当前任务,转而去执行其他任务的情况称为异常。异常产生于CPU内部,且分为以下三种:1.错误:通常是指令的操作数的错误,CPU在执行完异常处理的代码后,再回到产生错误的这条指令(既这条指令会被压栈),在执行一次若还是原创 2016-07-01 09:21:23 · 512 阅读 · 0 评论 -
堆的调试
在有堆的基础认识之后,可以开始动手模拟与堆相关的调试技术。1.堆简介原创 2017-03-07 15:29:39 · 488 阅读 · 0 评论 -
在软件开发生命周期中使用应用程序验证器
转自https://msdn.microsoft.com/zh-cn/library/aa480483.aspx#EHAA发布日期 : 2006-6-5 | 更新日期 : 2006-6-5摘要Microsoft® Application Verifier (AppVerifier) 是针对非托管代码的运行时验证工具,它有助于找到细小的编程错误、安全问题和受限的用户帐转载 2017-02-23 13:31:08 · 522 阅读 · 0 评论 -
栈的调试
在有了栈和函数调用的认识之后,可以动手模拟和栈相关的调试技术。原创 2017-01-23 17:40:46 · 531 阅读 · 0 评论 -
WinDbg使用基础
启动WinDbg后发现以一般的软件并没有什么差别,菜单工具栏,客户区,状态栏都有,估计作用也差不多为了学习WinDbg,让整个过程尽量可控,我们自己编写被调试程序:生成release版本的exe文件,为模拟一般情况下的调试我们将exe文件拷贝到一个单独的路径上。通过WinDbg的File->Open Executable菜单打开生成的exe文件,出现command窗口,co原创 2016-12-23 13:14:12 · 406 阅读 · 0 评论 -
栈和函数调用
def:栈是一种后入先出的数据结构,天然适合用来保存需要函数调用等需要保存的信息。在windows的用户进程中都包含用户栈和内核栈两个栈。每个线程都至少包含有一个栈,每个栈都对应内核中的一个_KTHREAD结构:在线程开始运行之前需要创建这个线程的栈,创建过程如下:栈作为一个存储数据的结构,在函数调用的过程中执行CALL和RET指令时分别以如下方式使用:原创 2016-11-24 10:35:46 · 884 阅读 · 0 评论 -
深入解析结构化异常处理(SEH) - by Matt Pietrek(*****)
转自http://blog.csdn.net/chenlycly/article/details/52575260结构化的异常处理还有比这篇文章更详细的吗?感觉写的比老雷清楚。尽管以前写过一篇SEH相关的文章《关于SEH的简单总结》, 但那真的只是皮毛,一直对Windows异常处理的原理似懂非懂, 看了下面的文章 ,一切都豁然开朗. 1997年文章,Windows技转载 2016-12-01 20:28:35 · 3228 阅读 · 0 评论 -
堆和堆检查
程序中在栈中保存的数据会随着函数的退出而被清理,只能用于保存局部变量。对于生存期大于局部变量的数据存储通常保存在堆中,堆拥有远比栈更多的可用空间。对于堆的分配和管理,内核使用堆管理器完成。原创 2016-11-29 16:02:22 · 1182 阅读 · 0 评论 -
用户态调试过程
在了解了用户态调试模型之后,根据模型来理解用户态调试过程。原创 2016-11-01 13:39:10 · 943 阅读 · 0 评论 -
未处理异常和JIT调试
系统启动进程的主要过程描述如下:通常系统会在进程启动后把客户代码的入口函数(一般是运行时库的入口函数,运行时库再去调用main函数)的地址传给BaseProcessStart,从BaseProcessStart函数中进入到客户代码,而BaseProcessStart会注册一个处理客户代码的为处理异常的异常处理器(通常是ExitThread)。类似的BaseThreatStart处理线程原创 2016-11-04 16:55:37 · 8387 阅读 · 1 评论 -
中断和异常管理
def:中是内存中的一张线性表CPU通过中断描述符表(IDT)来处理中断和异常,IDT是内存中的一张线性表,CPU的IDTR指向IDT表,IDT表项为门描述符,通过门描述符中的段寄存子和偏移量找到处理中断的函数例程,门描述符主要有三种:内存布局如下:而windows统一处理软件中断和硬件中断,定义了描述异常的结构EXCEPETION_RECORD:原创 2016-11-03 20:29:16 · 356 阅读 · 0 评论 -
用户态调试模型
在用户态调试过程中调试器和被调试进程是两个独立的进程,而调试器需要通过控制被调试进程来进行调试,这与独立的两个进程之间的数据不可互相访问相矛盾。考虑进程的逻辑内存共4G大小,而高2G为系统空间,在实际中所有进程共用同一个系统空间。所以为了然调试器进程控制被调试进程需要有系统内核的支持,我们将这部分成为调试子系统。调试子系统主要由3个部分组成:位于NTDLL中的支持函数,位于内核文件中的支持函数原创 2016-08-04 22:22:37 · 592 阅读 · 0 评论 -
Windows概要
def:我们将处于运行状态的程序称为进程,由操作系统所调度的任务,是可执行文件的一个映射。进程与程序的关系可以类比于类和实例,一个程序可以产生多个进程。def:被cpu所调度的任务,进程中的指令。一个进程可以有多个线程,若将进程视为资源的集合,线程则为计算资源。进程可以视为一个资源的集合,由操作系统调度。操作系统给每个进程分配大小为4G的虚拟内存,高2G为系统内核运行的空间,而低2G为用户原创 2016-07-26 22:57:24 · 327 阅读 · 0 评论 -
CPU基础
CPU组成:运算器,控制器,寄存器等部件组成。控制器包含指令寄存器,程序计数器,译码器,操作控制器组成。指令执行过程:1.外存中的程序(指令)和数据载入到内存中。2.将内存中的指令和数据分别载入指令寄存器和数据寄存器中。3.译码器将指令寄存器中的指令翻译为机器可识别的唯一机器码。4.操作控制器控制运算器工作。5.运算器从寄存器中取出数据并进行计算(中间结果也保存在寄存器中)。6.将运算结果写回原创 2016-06-22 17:54:21 · 390 阅读 · 0 评论 -
X86汇编快速入门
转自http://www.cnblogs.com/YukiJohnson/archive/2012/10/27/2741836.html(没看到版权说明,先转了,如有冒犯请联系我删除)X86汇编快速入门本文翻译自:http://www.cs.virginia.edu/~evans/cs216/guides/x86.html本文描述基本的32位X86汇转载 2016-06-22 10:02:25 · 468 阅读 · 0 评论 -
80X86寄存器详解
转载自 Zachary.XiaoZhen - 梦想的天空(http://www.cnblogs.com/zhaoyl/archive/2012/05/15/2501972.html)引子打算写几篇稍近底层或者说是基础的博文,浅要介绍或者说是回顾一些基础知识,自然,还是得从最基础的开始,那就从汇编语言开刀吧,从汇编语言开刀的话,我们必须还先要了解一些其他东西,转载 2016-06-22 09:59:51 · 319 阅读 · 0 评论 -
断点和单步执行
需要对CPU的中断和异常要先有所了解参考上一篇文章断点 INT 3:CPU的调试指令专门用来中断到调试器,是一条单字节指令0xCC,CPU执行到这条指令时就会转去异常处理函数来处理这个异常(转入调试器),在处理完成后执行下一条指令。利用INT 3指令的特殊性我们在调试器中可以使用INT 3来替换某一条指令的第一个字节来实现断点的功能,执行到这条指令时CPU中断到调试器,调试器在将原先的指令原创 2016-07-05 22:11:12 · 4377 阅读 · 0 评论 -
分支记录和性能监视
def:分支记录就是记录指令的跳转,包括从哪里来到哪里去。记录LBR(last brach recording)用于记录最近的一条跳转指令。CPU中有提供LBRFromIp,LBRToIp来记录跳转,LastExceptionFromIp和LastExceptionToIp记录异常的跳转,在通过debguctl寄存器来控制CPU的调试功能,说明如下:LRB记录需要多条才可以原创 2016-07-13 23:14:43 · 427 阅读 · 0 评论 -
资源泄漏的调试
资源泄漏就是进程向系统申请了资源但是用完了没有还给系统,造成了系统资源一直被占用,无法重复利用。系统资源有限,资源泄漏的后果就是资源耗尽。简单的句柄泄漏以如下代码生成exe:#ifndef __SRV_H#define __SRV_H#include class CServer{public: static BOOL GetTextFileContents(HAN原创 2017-04-27 19:27:47 · 987 阅读 · 0 评论