#安全测试 #安全 #模糊测试

无 std symcc_runtime

基于 SymCC 的 Rust 构建符号执行跟踪工具

16 个版本

0.13.2 2024年7月31日
0.11.1 2023年8月31日
0.10.1 2023年5月24日
0.9.0 2023年1月31日
0.1.2 2021年8月23日

#9 in #安全测试

Download history 136/week @ 2024-06-10 10/week @ 2024-06-17 126/week @ 2024-06-24 123/week @ 2024-07-01 126/week @ 2024-07-29

每月下载量 177

MIT/Apache

2.5MB
68K SLoC

SymCC 符号执行跟踪运行时 Rust 绑定

此包允许您为 SymCC 构建自定义运行时。有关详细信息,请参阅文档


lib.rs:

SymCC 运行时绑定

此包包含从 Rust 调用的 SymCC 运行时接口的绑定。可以使用 SymCCSymQEMU 使用 SymCC 运行时来跟踪目标程序的执行。

如何使用

从高层次来看,此包的用户可以实现 Runtime 特性,并使用 export_runtime 宏将运行时接口作为 cdylib 导出。从技术层面来看,SymCC 运行时是一个动态库(共享对象),在目标执行期间,SymCC 的仪器层会调用其暴露的一组符号。因此,要创建运行时,需要单独的运行时 crate,因为这是使用 cargo 创建独立动态库的唯一方法。

附加功能

为了方便常用用例,这个包还包含了一些预构建的功能,形式为一个用于将执行跟踪到共享内存区域的 tracing::TracingRuntime。它还包含了一个单独的抽象,可以在 filter 模块中轻松过滤组成此类跟踪的表达式。例如,它包含了一个 filter::NoFloat 过滤器,它将跟踪中的所有浮点运算具体化,因为这些通常比离散约束更难处理。

包设置

您的运行时包应在其 Cargo.toml 中设置以下键

[profile.release]
# this is somewhat important to ensure the runtime does not unwind into the target program.
panic = "abort"
[profile.debug]
panic = "abort"

[lib]
# this is required for the output to be a shared object (.so file)
crate-type   = ["cdylib"]
# SymCC and SymQEMU expect to runtime file to be called `libSymRuntime.so`. Setting the name to `SymRuntime` achieves this.
name = "SymRuntime"

依赖项

~9–40MB
~593K SLoC