#unsafe #audit #tool #region

unsafe_ls

一个列出不安全块及其内部不安全操作的工具,以方便对需要额外仔细检查的区域进行审计

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2014年12月30日

#25#audit

MIT/Apache-1.0

19KB
403 代码行

unsafe_ls

Build Status

列出不安全块及其内部的不安全操作,以便更容易审计需要额外仔细检查的区域。这不能捕获由不良的 unsafe 代码在安全代码中引起的内存不安全操作,但正确编写/审计的 unsafe 块不会引起此类问题。

它可以用来仅显示包含非FFI不安全性的块,以避免在大量的“常规”C调用中过滤。

遗憾的是,#11792 意味着你可能需要传递 -L 指向包含核心库的目录(如 std 等)或编辑 DEFAULT_LIB_DIR 静态变量以避免重复。

示例

查看所有标志,请参阅 unsafe_ls -h

除了 FFI 之外的所有 unsafe

$ ./unsafe_ls -n test.rs
test.rs:3:1: fn with 1 static mut
    x += 1
test.rs:7:5: block with 1 deref, 1 static mut
        *std::ptr::null::<int>();
        x += 1;
test.rs:11:5: block with 1 unsafe call
        foo()

仅 FFI

$ ./unsafe_ls -f test.rs
test.rs:11:5: block with 1 ffi, 1 unsafe call
            abort()
test.rs:17:5: block with 1 ffi
        abort()

所有 unsafe

$ ./unsafe_ls -nf test.rs
test.rs:3:1: fn with 1 static mut
    x += 1
test.rs:7:5: block with 1 deref, 1 static mut
        *std::ptr::null::<int>();
        x += 1;
test.rs:11:5: block with 1 ffi, 1 unsafe call
        foo();
            abort()
test.rs:17:5: block with 1 ffi
        abort()

构建

cargo build --release

已知在 Rust master aa0e35bc6 2014-07-22 上工作。

用户评价

我使用它提交了 #12445,减少了 transmute 的数量(因为这些非常不安全),以及其他一些小的改动。

无运行时依赖