论文部分内容阅读
随着计算机软件应用在越来越多的关键岗位,软件运行时的不可靠行为会造成严重的危害。在软件运行时对其进行分析和监控,可以诊断和约束软件的不可靠行为,消除软件不可靠性带来的危害。对软件编译时生成的编译器中间语言进行分析和插桩,可以分析和监控软件运行时的行为。因此在软件运行时如何通过编译器中间语言增强软件的可靠性成为一个重要的研究问题。本文针对软件运行时的可靠性进行研究,主要研究完全优化后的插桩无法准确定位语句和表达式的问题、运行时软件错误隔离缺乏可移植性问题和第三方软件库文档缺乏解析的问题。本文的主要贡献如下:(1)抽象语法树级别的插桩方法PAST。由于编译时完全优化的软件调试信息并不准确,因此在软件开发人员对运行时软件进行分析时,存在着无法准确定位带有语义信息的语句和表达式的问题。PAST利用未优化的编译器中间语言和带有语义信息的抽象语法树之间的对应关系,为开发人员提供带有语义信息的插桩方式,从而解决了在运行时无法准确定位语句和表达式的问题。此外,PAST在运行时不仅提供跨平台的分析框架,同时将分析工具在软件运行时的基本开销降低至可以忽略,这使得PAST可以直接应用在产品级软件的分析中。(2)基于中间语言的软件错误隔离方法WebC。在机器指令级别监控运行时软件行为的软件错误隔离方法,需要为不同的体系结构设计不同的运行时行为约束,这导致软件错误隔离方法在不同体系结构之间存在缺乏可移植性的问题。WebC利用编译器中间语言具有操作可移植性的优点,在编译器中间语言级别插入软件运行时的约束,从而解决了软件错误隔离缺乏可移植性的问题。此外,WebC不仅可以直接嵌入在浏览器中,在运行时WebC安全约束对软件性能的影响也并不明显。(3)基于自然语言处理的编程接口文档解析。使用自然语言编写的编程接口文档,无法解析成包含软件运行时行为约束的、形式化的规范。本方法通过识别文档结构、识别自然语言单词,解决了自然语言编程接口文档无法解析成软件运行时规范的问题。