论文部分内容阅读
二进制翻译技术是解决代码移植问题的重要手段。静态二进制翻译在翻译生成程序运行效率方面具有绝对优势,在生成代码重用性和膨胀率两方面也占有优势,但动态和动静相结合的翻译模式却是现今大家关注和研究的焦点,主要原因是静态二进制翻译在翻译完备性上有欠缺,它不能很好的处理间接跳转、间接调用和自修改代码等。静态二进制翻译面临的完备性问题是一个难点问题,近半个世纪来众多研究人员为解决此问题一直做着不懈的努力。本文所做工作致力于解决阻碍静态二进制翻译发展的翻译完备性问题:解决间接转跳转和间接调用指令的目标地址确定问题;解决对自修改代码的处理问题。另外,在代码分析方面解决数据类型恢复问题和用户函数与库函数同名的区分问题。本文的主要贡献如下:1、提出了一种解决静态二进制翻译完备性问题的亚纯静态二进制翻译框架。此翻译框架将二进制翻译器的输入由原来的一维变成了二维输入<待翻译二进制程序,制导文件>,翻译时根据制导文件提供的信息有效解决间接跳转、间接调用和自修改代码等制约静态二进制翻译发展的问题。2、提出了一种新的功能块概念。功能块是基于描述代码功能而提出的程序划分概念,以更有利于对代码的分析。由于基于基本块的程序分析方法不能很好地解决间接转移指令目标地址的确定问题,本文给出了一种基于功能块的程序分析方法,为解决间接转移指令目标地址确定问题奠定了基础。3、提出了一种程序执行路径逆向构造技术。使用本文提出的执行路径逆向构造技术,可以构造一条从程序入口点到某个间接转移指令的执行路径,从而有效降低获取间接转移指令目标地址的时空消耗和复杂度。4、提出了一种基于内存操作码和调试信息的数据类型恢复技术。本文以针对内存空间的存取操作为突破点,结合对栈空间和数据段的模拟分析给出数据类型恢复算法。它对C语言使用的基本数据类型都能成功恢复,另外将构造数据类型恢复成等价的多个基本数据类型,同时解决了关于字符串和指针的数据类型恢复问题。5、提出了一种用户函数与库函数同名的区分技术。由于ITS翻译系统使用的库函数快速识别技术在区分库函数和与库函数同名的用户函数方面存在缺陷,本文提出了一种新的判定用户函数和库函数同名的区分算法。6、给出了一种对自修改代码的处理算法。综合使用快照和内存一致性更新技术,基于对程序所有代码的遍历执行,给出对自修改代码的识别与提取算法。经SPEC2006、IEEE浮点测试软件和Fortran78Test Suite等测试集1800个测试用例(约50多万行源代码,上百万条IA-64指令)的测试,本文提出的各项技术的正确性和有效性得到了充分的验证,为解决静态二进制翻译面临的翻译完备性问题和代码分析问题提供了坚实的基础。