5.2 内核级脚本引擎 现代调试器在提供高性能和高度可定制的脚本框架方面存在不足。为了解决这一差距,并面临VMX-root模式下无法直接访问内存的支持缺失,我们从头设计了一个启用VMX的脚本引擎。据我们所知,这是唯一在VMX-root模式下提供诸如操作系统自旋锁、内存检查以及辅助功能(例如printf和strlen)等优点的脚本引擎解决方案。如图4a所示,脚本引擎由一个后端(使用LL(1)和LALR(1)解析器实现最大效率)和一个前端组成,前端使用MASM风格语法与C关键字(例如if、else、for)以及易于定制的语法。
用户输入的脚本被传递到前端主机,在通过词法分析器扫描后被解析为中间表示形式(IR),然后通过串行接口发送到客户端内核VMX-root模式中执行。之后,一个缓冲区逐渐填充着执行结果并传回到主机。与普通调试器使用双向方法(逐行发送和解析命令和脚本)相比,这种方法通过将整个脚本发送到VMX-root模式中,并以单向流的方式将响应返回到用户模式,提供了相当大的性能改进。
如图4b所示,还可以将脚本设置为事件的动作。在这种情况下,解析后的IR脚本被存储在VMX-root内核中一次,一旦触发对应事件,则在本地执行IR,从而提高脚本引擎的执行性能。附录E提供了一个带有详细说明的样例脚本。