由于我们需要独立地分析各个应用,这表明了该解决方案的总体理念:即模拟系统必须将待分析的应用与系统其余应用进行分离。这也是我们决定采用应用源代码,并尽量阻止发生这种情况:被分析的应用引用被模拟的资源。
上述决定可采用一组工具来实施,包括汇编语言分析器、多个模拟器模块,以及相应的规范模块。
汇编语言分析器作为该技术的核心,可配置用于截取任何指令(指令组、汇编结构等),这对于高级模拟模块非常有用。
图 1 概要介绍了实现过程以及技术操作基本原理。
首先,源代码被编译为汇编码,之后汇编码会根据模拟模块的需要自动进行分析和安装。在本例中,此实现过程包括下列步骤:在各内存访问之前保存执行上下文,使用描述内存访问操作的参数调用回调函数(根据所使用的模拟器模块来命名),并恢复执行上下文。最后,执行上述的内存访问。
图1. 技术概述一旦汇编文件编制完成,它将被进一步被编译成目标文件,然后构建可执行模块。
所构建的可执行模块现在已可进行模拟,它与模拟器模块静态链接,形成一个模拟包,或者可能需要模拟器作为外部动态链接库。
如图 1 所示,在执行期间,需要调用我们早期在测试阶段指定的回调函数,并接收描述模拟操作的所有必要参数(例如:地址、操作类型和大小、访问类型 ― 读或写)。回调函数可以选择直接调用模拟器模块,执行模拟前计算,或者在文件中保存必要参数,用于进一步分析。
来自所使用的模拟器模块的模拟结果,在程序执行期间随时可用。这可支持动态控制模拟过程。
为了阐明该技术比“一般”模拟器更易于使用,以及高级程序员会遇到汇编指令问题的原因,图 2 显示了测试代码的实际情况。
图 2. 普通构建程序的其它用户界面如果您选择一种编译器,只需从菜单中选择代码处理器,选中“使用分析器传递编译(Use parser-passed compilation)”复选框,并选择所需实施(instrumentation)模块。