文章插图
具体来说,我们拓展了QEMU的组件TCG 。在未被修改的qemu中,TCG负责将guest架构的机器码块翻译为架构独立的语言,叫做TCG ops,然后编译这些TCG ops为host架构的机器码 。由于性能原因,这些翻译好的blocks随后被缓存,所以翻译在每次执行过程中只需要进行一次 。SYMQEMU在这过程中插入了一步:当被测程序翻译为TCG ops时,我们不仅插桩来模拟guest CPU而且产生一些额外的TCG ops来建立对应的符号约束表达式 。针对建立符号表达式以及求解这些的支持库,symqemu重用SYMCC的支持库,即重用QSYM的 。
(此处有详细例子,感兴趣去读原文)
目前我们使用的qemu linux用户模式的仿真,即我们只模拟了普通用户空间的guest系统 。系统调用被转换来满足host架构的要求,这些是针对host的内核来工作的,使用了qemu常规的机制 。因此我们的符号执行分析在系统调用处停止,与QSYM以及angr类似 。与全系统仿真(比如s2e)来讲,这样节省了为每个target架构准备系统镜像的方面,并且提升了性能,因为是直接运行kernel代码而不是通过仿真 。但是如果需要的话,SYMQEMU是很容易的被拓展为QEMU的全系统仿真 。
架构 独立
首先要明确,执行分析的主机的架构叫做host,被测代码在其架构之上被编译的叫做guest 。尤其是在嵌入式设备分析中,host与guest架构不同是显然的,嵌入式设备的系统进行符号执行分析的能力不足,所以将固件放置到其他系统中进行分析,SYMQEMU就是为这种情况准备的,能够在多架构下运行 。
SYMQEMU利用qemu TCG translators,涵盖多种处理器类型,并且我们针对其修改几乎独立于target架构 。
也就是说,SYMQEMU可以在相关的host架构上运行并且可以支持所有qemu能够处理的guest架构下的二进制文件的分析 。
与之前的设计比较
文章插图
本节之处SYMQEMU与最先进的符号执行系统的不同之处 。
与angr和s2e相似,SYMQEMU使用传统的,以IR来完成符号执行处理,显著的降低了实现的复杂性 。但是不同于此二者的是,他是基于编译的符号执行技术,显著的提升了性能 。
与QSYM比较,SYMQEMU设计最重要的优势是架构灵活性的同时,能够维持很高的执行速度 。在qemu之上进行设计使其能够或者很多的数量的模拟器支持的架构处理能力 。
SYMCC虽然不能够分析二进制代码,但是其给SYMQEMU提供了基于编译的思路 。此二者都是通过修改其IR来在目标程序中插入符号处理,并且都是将结果直接编译为能够高效运行的机器码 。然而SYMCC是面向源代码的,而SYMQEMU解决了分析二进制文件的不同指令集的挑战,SYMQEMU在翻译过程中的TCG ops中插桩,SYMCC在编程过程中的LLVM bitcode内插桩 。并且SYMQEMU解决了guest和target架构不匹配的问题 。
我们认为本文工作结合了s2e以及angr的优势,即多架构支持,同时结合了symcc的优点,高性能,摒弃了他们的缺点;并且我们找到了一种方式,能够将SYMCC的核心idea应用到二进制文件的分析之中 。
内存管理当symqemu分析软件时,他会建立很多符号公式来描述中间结果和路径约束 。他们占用的内存会随着时间而一直增长,所以symqemu需要一种方式来清除那些不再被使用的公式 。
首先我们讨论一下为什么内存管理是第一位的 。IR在任何合理的程序中或对程序流有影响,或者成为最终结果的一部分;在前者情况下,对应的表达式被添加到路径约束的集合中,并且不能被清楚;但是针对后者情况,表达式成为最终结果的描述中的字表达式 。所以符号表达式是什么时候变成不重要的呢?关键就是程序的输出是程序结果的一部分,但是他可能在程序的结束之前就已经产生了 。
所以我们应该在符号在最后一次使用之后将其清除 。QSYM使用的C++ smart points来实现了这个目的,但是我们在被修改的qemu中不能简单的相同的办法:TCG是一个动态翻译器,由于性能因素,它不产生任何被翻译代码的拓展分析 。这使得高效的确定插入清除代码的位置非常困难 。并且经验告诉我们,大多数程序中包含很少的,在程序执行过程之中无用的,相关符号数据和表达式,所以我们不想我们的清除机制造成很大的功耗 。
推荐阅读
- 图文结合 带你用纯C实现一个内存池
- 标点符号起源于什么时候 标点符号的由来是什么
- 一篇文章,让你搞懂基金分红 基金分红是什么意思
- 特别酷的符号昵称 有哪些火爆的昵称符号
- 赞美谷雨诗句 雨生百谷,带你邂逅最美的谷雨诗词
- K线图具体符号的意义分别是什么? 什么是k线
- 怎么在CAD、Word里敲出直径符号,你会吗? 直径符号怎么输入
- 方框里怎么打√符号?这些技巧 方框内打钩
- 花符号网名大全花样符号 好看的花样网名符号有哪些
- 团队免费带你赚钱 微信10元投资赚钱500
