论文部分内容阅读
自修改代码是二进制翻译研究中的难点和影响翻译效率的重要因素。众多文献介绍了自修改代码对二进制翻译效率的影响,但均缺乏量化分析;自修改代码具有在程序执行过程中动态地改变程序自身执行指令的特点,在计算机安全领域有广泛的应用。在自修改代码频繁出现时,二进制翻译器中如何设计和实现高效的代码缓存策略是加速二进制翻译效率值得研究的问题。针对上述问题,利用QEMU作为实验平台,对自修改代码和非自修改代码进行了大量的测试,量化地分析了自修改代码对翻译器的翻译效率和翻译块数量的影响。在量化分析了自修改代码对翻译效率影响的基础上,结合翻译器以基本块和Trace翻译的优点,精确的自修改代码缓存策略PSCM(Precise Self-modifying Code cache Management policy)在以Trace为翻译机制的前提下,通过基本块的精确替换方式,替换由于自修改造成的代码缓存中不一致的翻译块。PSCM通过页块映射把发生自修代码的物理页映射到具体的基本翻译块,通过Trace的定位确定基本翻译块对应的Trace,通过代码缓存管理维护代码缓存中的基本翻译块和Trace链,通过精确的块替换方法替换由于自修改代码造成的代码缓存中失效的基本翻译块。研究结果表明,在QEMU翻译器上,自修改代码随着自修改同比次数增长,其执行时间的增加速度平均是非自修改程序的5.81倍。平均每增加1次自修改,对应在QEMU上的翻译块数量增加10.51。翻译器以Trace为翻译机制的效率较基本块有明显优势。对于PSCM的测试表明,在代码缓存(Code cache)中的翻译块的数量(Flush Blocks counts,FB)为11时,PSCM策略加速因子为3.95;PSCM策略加速因子随着FB的增加而增加,数据说明利用PSCM策略能够改进翻译器在自修改代码翻译的效率。