第八章 动态调试
1.源代码级与汇编级的调试器
多数软件开发者熟悉源码级的调试器。这类调试器一般内置于集成开发环境中。为了检查程序内部变
量的状态一次一行的运行程序,源码级别的调试器允许设置断点,让程序中断在源代码某行。
汇编级调试器,也称为底层调试器,它的操作对象不是源代码而是汇编代码。同源代码级调试器一
样,你也可以使用汇编级调试器按照一次一条指令的方式运行程序。在某行汇编代码上设置断点,
来中断程序的运行并检查内存的内容。
2.内核模式与用户模式调试
内核模式代码的调试更具挑战性,内核模式调试一般需要俩个不同的系统。在用户模式中,调试器与
调试代码运行在统一系统中。
进行内核调试时,一个系统运行被调试的代码,另一个运行调试器。除此之外,你必须配置操作系统
使其开启内核调试功能,并将俩个系统连通。windbg是唯一支持内核调试的流行调试器。ollydbg是恶
意代码分析人员使用最多的调试器,但不支持内核调试。windbg支持用户模式调试,IDA Pro也有一个
内置的调试器,但它并不具有与OllyDbg相同的功能,且不如OllDbg使用方便。
3.使用调试器
有俩种调试程序的方法,第一种是利用调试器启动程序。当程序启动后,它被加载到内存,程序在其
入口点运行之前立即停止运行。此刻你已经完全控制了程序。
也可以附加调试器到一个已经运行的程序上。当程序的所有线程暂停时,你就可以调试它了,当你调
试一个已经运行的程序或者一个已经被恶意代码感染的进程中,这是一个很好的办法。
单步调试
单步跳过,单步跳入
用断点暂停执行 断点用来暂停程序的运行并让你查看程序的状态。程序在断点处暂停运行被成为“中断”,
程序运行过程中,因为寄存器的值和内存的地址不断变化的,所以不能访问寄存器的