如何使用符号执行来查找bug,例如SAGE,KLEE,S2E
how to use symbolic execution to find bug, for example SAGE,KLEE,S2E
正如标题,有谁知道那些工具用来查找bug的方法有什么不同吗? kLEE 和 SAGE 也许可以找到 out-of-bound 访问和缓冲区溢出,KLEE 可以使用断言,但是还有其他方法吗?
你的问题很笼统。我建议阅读科学论文和文档以获取更深入的信息。
然而,SAGE 主要使用 Concolic Execution,而 KLEE 使用 (vanilla) Symbolic Execution。 S2E 仍然与这些不同(尽管是一个遥远的 KLEE 分支),因为它使用符号执行和具体执行之间的动态切换,使用允许在 QEMU-BC 和 LLVM-BC 之间进行即时转换的 jit。
这与这些特定工具使用的执行范例的根本区别有关,但显然它只能触及表面。
对于最终用户来说,一个相关的区别是 KLEE 必须使用能够发出 llvm 代码(例如 llvm-gcc 或 clang)的特定编译器进行编译,并且开发人员必须弄乱构建系统。这通常意味着 KLEE 仅限于纯 C。S2E 不关心您使用哪种语言,您可以 运行 编译二进制文件,但缺点是无法检测到某些缓冲区溢出 运行 并且执行速度有点慢(高达 100 倍)。这取决于您要分析的内容。
正如标题,有谁知道那些工具用来查找bug的方法有什么不同吗? kLEE 和 SAGE 也许可以找到 out-of-bound 访问和缓冲区溢出,KLEE 可以使用断言,但是还有其他方法吗?
你的问题很笼统。我建议阅读科学论文和文档以获取更深入的信息。
然而,SAGE 主要使用 Concolic Execution,而 KLEE 使用 (vanilla) Symbolic Execution。 S2E 仍然与这些不同(尽管是一个遥远的 KLEE 分支),因为它使用符号执行和具体执行之间的动态切换,使用允许在 QEMU-BC 和 LLVM-BC 之间进行即时转换的 jit。
这与这些特定工具使用的执行范例的根本区别有关,但显然它只能触及表面。
对于最终用户来说,一个相关的区别是 KLEE 必须使用能够发出 llvm 代码(例如 llvm-gcc 或 clang)的特定编译器进行编译,并且开发人员必须弄乱构建系统。这通常意味着 KLEE 仅限于纯 C。S2E 不关心您使用哪种语言,您可以 运行 编译二进制文件,但缺点是无法检测到某些缓冲区溢出 运行 并且执行速度有点慢(高达 100 倍)。这取决于您要分析的内容。