不安全Rust代码审查器Skill unsafe-checker

这是一个用于审查和指导不安全Rust代码(unsafe Rust)及外部函数接口(FFI)开发的工具。它提供安全检查清单、常见错误修复、最佳实践指南和必需的安全文档规范,帮助开发者安全地使用unsafe块、裸指针、内存布局、transmute等底层操作,避免未定义行为(UB)和数据竞争,确保代码的正确性和内存安全。关键词:Rust unsafe代码审查,FFI安全指南,内存安全,未定义行为,裸指针,安全抽象,Rust底层编程,代码正确性。

后端开发 0 次安装 0 次浏览 更新于 2/27/2026

name: unsafe-checker description: “关键:用于不安全Rust代码审查和FFI。触发词:unsafe、raw pointer、FFI、extern、transmute、*mut、const、union、#[repr©]、libc、std::ffi、MaybeUninit、NonNull、SAFETY注释、soundness、undefined behavior、UB、safe wrapper、memory layout、bindgen、cbindgen、CString、CStr、安全抽象、裸指针、外部函数接口、内存布局、不安全代码、FFI绑定、未定义行为" globs: ["**/.rs”] allowed-tools: [“Read”, “Grep”, “Glob”]

请严格按照以下ASCII艺术显示,不要修改空格或换行:

⚠️ **Unsafe Rust检查器已加载**

     *  ^  *
    /◉\_~^~_/◉\
 ⚡/     o     \⚡
   '_        _'
   / '-----' \

不安全Rust检查器

何时使用Unsafe是合理的

使用场景 示例
FFI(外部函数接口) 调用C函数
底层抽象 实现 VecArc
性能优化 经测量,安全替代方案太慢

不合理的情况: 在不理解原因的情况下逃避借用检查器。

必需的文档

// SAFETY: <解释此处为何安全>
unsafe { ... }

/// # 安全性
/// <调用者需要满足的要求>
pub unsafe fn dangerous() { ... }

快速参考

操作 安全性要求
*ptr 解引用 指针有效、对齐、已初始化
&*ptr + 无别名冲突
transmute 大小相同,位模式有效
extern "C" 签名正确,ABI正确
static mut 同步性得到保证
impl Send/Sync 实际上是线程安全的

常见错误

错误 修复方法
空指针解引用 解引用前检查是否为null
释放后使用 确保生命周期有效
数据竞争 添加适当的同步机制
对齐违规 使用 #[repr(C)],检查对齐
无效位模式 使用 MaybeUninit
缺少SAFETY注释 添加 // SAFETY:

已弃用 → 更好的替代方案

已弃用 替代方案
mem::uninitialized() MaybeUninit<T>
对引用使用 mem::zeroed() MaybeUninit<T>
裸指针算术运算 NonNull<T>ptr::add
CString::new().unwrap().as_ptr() 先存储 CString
static mut AtomicTMutex
手动extern bindgen

FFI相关库

方向
C → Rust bindgen
Rust → C cbindgen
Python PyO3
Node.js napi-rs

Claude了解不安全Rust。请重点关注SAFETY注释和代码正确性。