论文部分内容阅读
随着软件系统日益庞大,系统的性能显得尤为重要。软件系统源程序中函数的调用关系、调用次数以及执行时间是衡量其性能的重要指标。静态分析源程序可快速了解源程序的整体结构,通过扫描源程序获取静态性能数据,是一种预测程序性能的方式,但不能掌握系统的实际运行情况,获取的数据精确度不高,且数据量庞大,重点信息不突出;动态分析能反映程序实际运行的主干,得到的数据准确,但需要运行程序,由于植入了部分采集代码而导致效率不高,并且与执行路径相关,不能反映源程序的所有信息。本文在深入分析逆向工程中源码分析技术以及插桩技术的基础上,重点研究了静态和动态性能数据的提取方法。静态分析模块分析设计了词法分析器和语法分析器,通过词法分析器和语法分析器对源程序进行抽象,获取静态性能数据,包括函数调用关系和调用次数,在此基础上可分析得到热点函数。静态性能数据以调用树的形式存储在内存中。动态分析部分提出了一种对目标文件格式的可执行文件进行插桩的方法,动态分析模块主要有采集程序和粘接代码两部分,采集程序是ELF格式的,包含了采集动态信息的核心算法,其中函数执行时间计时采用分片计时策略;粘接代码用于帮助采集程序获取控制权,这两部分代码将和可执行文件链接到一起运行到目标机上,在执行程序的同时,采集程序搜集动态性能数据,包括函数的执行时间和调用次数,并以调用森林的形式存储在内存中。静态性能分析与动态性能分析,无论从数据处理还是结果呈现方面都表现出相互渗透的特征,本文提出了静态与动态结合分析软件系统性能的框架,对获取的静态和动态数据进行融合处理。在系统实际运行环境下,函数之间的调用关系是相对趋于稳定的,且实际的调用比静态分析出的调用要少很多,即动态的调用关系是静态调用关系的子集,所以本文采用在静态调用树的基础上融入动态数据的方式,融合两方面的性能数据,最后以调用图的形式呈现软件系统的性能特征,辅助程序开发人员理解程序,了解程序的动态行为,发现性能瓶颈,明确程序优化的方向,采用动静态结合的方式,提高性能数据的全面性和准确性。