用途
unsafe-checker 用于 Rust 不安全代码的审查与 FFI 场景。当代码中出现 unsafe、裸指针、FFI、extern、transmute、*mut、*const、union、#[repr(C)]、libc、std::ffi 等关键词时触发,帮助开发者判断 unsafe 的使用是否合理,并检查安全注释与文档是否到位。
主要能力
- 判断 unsafe 何时是合理的:FFI(调用 C 函数)、底层抽象(实现 Vec、Arc 等)、性能(在安全替代方案过慢且已测量为瓶颈时)。明确不合理的用法:在不理解原因的情况下绕过借用检查器。
- 要求并检查安全文档:unsafe 块需要
// SAFETY: <why this is safe>注释;unsafe 函数需要/// # Safety文档说明调用方要求。 - 提供常见操作的安全要求速查:
*ptr解引用需有效、对齐、已初始化;&*ptr还需无别名违规;transmute需大小相同且位模式有效;extern "C"需签名与 ABI 正确;static mut需保证同步;impl Send/Sync需确实线程安全。 - 列出常见错误及修复:空指针解引用、释放后使用、数据竞争、对齐违规、无效位模式、缺少 SAFETY 注释。
- 给出已废弃 API 的替代方案:
mem::uninitialized()与用于引用的mem::zeroed()改用MaybeUninit<T>;裸指针算术改用NonNull<T>、ptr::add;CString::new().unwrap().as_ptr()需先存储 CString;static mut改用AtomicT或Mutex;手动 extern 改用 bindgen。 - 提供 FFI crate 选型参考:C → Rust 用 bindgen;Rust → C 用 cbindgen;Python 用 PyO3;Node.js 用 napi-rs。
使用方式
该技能以技能形式加载,加载后会在相关主题出现时提供上述检查规则与参考信息。资料未提供具体的安装命令或调用步骤。
适用场景
适用于审查包含 unsafe 代码的 Rust 项目、编写或维护 FFI 绑定、排查裸指针与内存安全问题、以及统一团队的安全注释规范。
限制
资料未提供该技能的收费、价格、平台支持范围或效果保证等信息。其定位是辅助审查与参考,不能替代对具体代码的完整安全论证。