论文部分内容阅读
程序员经常需要知道程序在动态执行时的行为,从而更好地判断软件产品的正确性和可靠性。由于程序执行行为会因为输入或执行环境的不同而表现出不确定性,因此程序员很难及时了解程序执行的动态信息,如内存操作行为、堆栈操作行为、控制流信息、数据流信息等。通过软件日志等方法可以描述出程序执行的大致轨迹,但需要在软件开发时花大量的时间去实现日志记录模块。对于某些库文件或者以二进制方式发布的程序来说,这种方法往往不能达到预期的目的。
本文基于自主开发的动态二进制翻译基础平台Crossbit,构建了一系列动态二进制探测工具,从性能探测,内存、堆栈行为检测等多方面研究了使用动态二进制探测工具对程序执行行为作分析的方法。这些动态二进制探测工具包括:Cachebit,一个可以模拟硬件Cache 执行行为的工具。通过不同的Cache 配置,可以模拟客户程序执行过程中的Cache 缺失情况。Membit,一个可以做堆栈溢出检测以及内存泄露检测的工具。通过影子内存技术,为堆栈添加额外的不可写空间以检测非法的溢出写操作。并利用动态的库函数替换完成内存申请分配的监控,统计内存泄露的情况。Resumebit,一个通过对程序状态进行备份与恢复实现进程级休眠与唤醒的工具。通过对程序执行过程中的状态数据定时进行备份,使程序在意外中断或者主动休眠后可以从中断点继续执行。Watchbit,一个可以回放特定内存状态变化的工具。通过对指定的内存地址建立内存访问日志从而回放该内存的状态变化,帮助程序员更好的了解某些关键变量或关键内存地址的状态变化过程,以更好的分析程序的执行行为。
通过本文介绍的这些动态二进制探测工具,可以帮助程序员获得一个程序在各个方面的执行行为数据,如Cache 表现,内存、堆栈操作,程序执行状态数据等。同时借助Crossbit的多源多目标特性,可以做到源机器平台无关的程序行为分析,为软件产品的可靠性与健壮性改进提供更多的参考。