软件调试
shifters
这个作者很懒,什么都没留下…
展开
-
注册自定义的异常处理函数
注册自定义的异常处理函数 2011-9-11SetUnhandledExceptionFilter()函数来注册一个自己的未处理异常过滤函数,下面是一个code实例/* Demonstrates how to use SEH so t原创 2011-09-11 13:59:59 · 1393 阅读 · 1 评论 -
VC6的栈平衡检查
栈的有序性依靠每个函数都遵守栈的使用规则,保证函数返回时栈指针(ESP)的值与进入函数时一致,即保持栈平衡。否则的话就会导致栈溢出,可能引起安全问题或程序崩溃。VC6会自动在每个函数的末尾插入指令来调用一个名为_chkesp的函数,_chkesp是C运行库(CRT)中的一个函数,用来检查栈指针的完好性,检查方法是比较ESP和EBP寄存器的值,看其是否相等,如果相等则通过,否则就准备参数调用_C原创 2011-11-21 17:30:39 · 1190 阅读 · 0 评论 -
读书笔记_局部变量和栈帧.
局部变量(Local Variable)是指作用域和生命周期都局限在所在函数或过程范围内的变量,它是相对于全局变量(Global variable)而言的。编译器在为局部变量分配空间时通常有两种做法:使用寄存器和使用栈。寄存器的访问速度快,但数量和空间有限,所以像字符串或数组不适合分配在寄存器中。编译器通常只会把频繁使用的临时变量分配在寄存器中,比如for循环中的循环变量。当编译器的优化选项打原创 2011-11-21 15:35:36 · 2941 阅读 · 2 评论 -
读书笔记_运行库的初始化和清理
运行库的初始化和清理编译器会为每个模块自动插入一个“编译器编写”的入口函数,在这个入口函数中进行好各种初始化工作后再调用用户的入口函数,在用户的入口函数返回后在运行自己的清理函数,我们把编译器插入的这个入口函数称为CRT入口函数Exe模块的入口函数用户入口函数CRT入口函数应用mainmainCRTStartup原创 2011-10-31 17:24:46 · 1414 阅读 · 0 评论 -
读书笔记_编译过程
编译器的两个工作,一是基本的编译功能,一个是检查并报告被编译软件中的错误。先看程序的构建过程: 源程序经过编译器(Compiler)被编译为等价的汇编语言模块,再经过汇编器(Assembler)产生出与目标平台CPU一致的机器码模块,这些机器码模块虽然已经可以被目标CPU所执行,但其中可能还包含没有解决(unresolved)的名称和地址引用,因此需要连接器(Linker)解决这些问题,并产生出符原创 2011-10-26 09:32:42 · 851 阅读 · 0 评论 -
读书笔记_windows内核调试_part 1
1. 远程调试的三种连接方式:串行口,1394和USB 2.0串口分为9针和25针,是最基本的通信方式,所有的内核通信都支持串口通信。1394又成为火线,是一种高性能的串行总线通信标准。使用1394进行通信时,目标系统和主机端的系统版本都必须至少是window原创 2011-10-07 22:01:24 · 988 阅读 · 0 评论 -
读书笔记_windows内核调试_part 2_内核对话过程
内核对话Windows启动内核调试后,主要做了以下几个工作1. 建立连接2. 调试器读取目标系统信息,初始化调试引擎(目标机)。3. 内核调试引擎通过状态变化信息包通知调试器加载初始模块的调试符号(目标机)。4. 调试器端发送中断包,将目标系统中断到调原创 2011-10-14 10:47:52 · 1537 阅读 · 0 评论 -
Windows下的日志机制
对于日志,大部分人的想法应当和我起初的想法一致,只要写个函数,在这个函数中打开一个文件,把需要记录的事件信息写到这个文件中。然后在需要记录日志的地方调用这个函数。但此时需要考虑的问题有很多,包括文件名的定义,是每次写日志都创建一个新文件还是在一个文件中写所有的信息。如果是同一原创 2011-09-25 15:23:27 · 9787 阅读 · 0 评论 -
Dump文件分析的常用命令
Dump文件分析的常用命令1 .symfix可自动设置符号文件的路径指向微软的符号库。相当于:.sympath[+] srv*DownstreamStore*http://msdl.microsoft.com/download/symbols2 .thread和.pro原创 2011-09-21 19:17:30 · 1632 阅读 · 0 评论 -
得到当前系统的转储文件的两种方法
一种方法是通过用户态下winDBG调试器。winDBG的命令.dump,可以通过内核调试会话来读取被调试系统的状态信息和内存数据,并以正常的格式输出到指定的文件中。命令的格式为 .dump c:\mydump.dmp 如果希望得到完全内存转储,则需要在文件名前加上/f选项。另原创 2011-09-20 19:43:29 · 2090 阅读 · 1 评论 -
读书笔记_栈的创建过程
首先看内核栈的创建过程:PspCreateThread函数是windows内核中用于创建线程的一个重要的内部函数,无论是创建系统线程(PsCreateSystemThread)还是用户线程(NtCreateThread),都离不开这个函数,除了创建重要的ETHREAD结构,PspCreateThread函数的另一个重要的任务是创建内核态栈。对于GUI线程,Windows会为其创建大内核栈,但是原创 2011-11-08 17:08:25 · 2156 阅读 · 1 评论