在硬件开发中经常听说仿真器和调试器,那什么是仿真器?什么是调试器?
仿真器(Emulator)以某一系统复现另一系统的功能。与计算机模拟系统(Computer Simulation)的区别在于,仿真器致力于模仿系统的外在表现、行为,而不是模拟系统的抽象模型。
仿真器可以替代目标系统中的微处理器,模仿其运行。仿真器运行起来和实际目标处理器一样,而且增加了很多功能,能够通过桌面计算机调试界面来观察微处理器中的程序和数据,并控制微处理器的运行。随着IC和软件集成平台的飞速发展,仿真器也不断被赋予新的内容和新的挑战,因为它的发展必须与CPU同步,要想在总线频率为150MHz、总线带宽为64bit的情况下实现Trace(跟踪)已经不可能了。
调试器是从计算机诞生开始就伴随着程序员的一位“挚友”,早期的调试器都是基于硬件直接实现的。
(1)调试器的工作原理。
要掌握调试器工作原理首先要了解CPU(中央处理器)的异常。异常是指程序运行过程中发生的一些不正常事件(如除0溢出、数组下标越界、所要读取的文件不存在等)。
调试器的工作原理是基于CPU的异常机制,并由操作系统的异常分发/事件分发子系统(或模块)负责将其封装处理后,以比较友好的方式与调试器进行实时交互。
每当调试器捕获到一个异常/事件之后,将会根据调试器的自身逻辑来判定是否需要接管这个异常/事件,并决定由调试器的哪个函数来接管。当调试器接管这个异常/事件后,将根据需求对其进行进一步的处理,处理完毕后再通知系统,此时新一轮的异常/事件捕获、分发循环开始。
(2)调试器的基本功能。
① 控制软件运行。调试器最基本的功能是将一个飞速运行的程序中断,并且使其按照用户的意愿再执行。调试器是靠迫使目标程序触发一个精心构造的异常来完成这些工作的。
② 查看软件运行中的信息。调试器可查看软件的当前信息,这些信息包含但不限于当前线程的寄存器信息、堆栈信息、内存信息、当前EIP附近的反汇编信息等。
③ 修改软件执行流程。包括修改内存信息、反汇编信息、堆栈信息、寄存器信息等。