就像标题一样,任何人都知道这些工具用来查找bug的方式有何不同? kLEE和SAGE可能会发现越界访问和缓冲区溢出,KLEE可以使用断言,还有其他任何方式吗?
答案 0 :(得分:1)
你的问题很通用。我建议阅读科学论文和文档,以获得更深入的信息。
然而,SAGE主要使用Concolic Execution,而KLEE使用(vanilla)符号执行。 S2E仍然不同于这些(即使是一个遥远的KLEE分支),它使用符号和具体执行之间的动态切换,使用允许在QEMU-BC和LLVM-BC之间进行动态转换的jit。
这与这些特定工具使用的执行范例的根本区别有关,但显然它只能划伤表面。
对于最终用户,一个相关的区别是KLEE必须使用能够发出llvm代码的特定编译器(例如llvm-gcc或clang)进行编译,并且开发人员必须弄乱构建系统。这通常意味着KLEE仅限于普通的C. S2E并不关心您使用哪种语言,并且您可以运行已编译的二进制文件,但缺点是无法检测到某些缓冲区溢出并且执行速度稍慢(向上)要素100倍)。这取决于你想要分析的内容。