如何使用符号执行来查找bug,例如SAGE,KLEE,S2E

时间:2015-07-13 07:55:19

标签: buffer-overflow sage klee

就像标题一样,任何人都知道这些工具用来查找bug的方式有何不同? kLEE和SAGE可能会发现越界访问和缓冲区溢出,KLEE可以使用断言,还有其他任何方式吗?

1 个答案:

答案 0 :(得分:1)

你的问题很通用。我建议阅读科学论文和文档,以获得更深入的信息。

然而,SAGE主要使用Concolic Execution,而KLEE使用(vanilla)符号执行。 S2E仍然不同于这些(即使是一个遥远的KLEE分支),它使用符号和具体执行之间的动态切换,使用允许在QEMU-BC和LLVM-BC之间进行动态转换的jit。

这与这些特定工​​具使用的执行范例的根本区别有关,但显然它只能划伤表面。

对于最终用户,一个相关的区别是KLEE必须使用能够发出llvm代码的特定编译器(例如llvm-gcc或clang)进行编译,并且开发人员必须弄乱构建系统。这通常意味着KLEE仅限于普通的C. S2E并不关心您使用哪种语言,并且您可以运行已编译的二进制文件,但缺点是无法检测到某些缓冲区溢出并且执行速度稍慢(向上)要素100倍)。这取决于你想要分析的内容。