关于 unsafe-checker
帮助 Rust 开发者评估 unsafe 代码、记录安全不变量并避免常见健全性错误的技能,重点检查指针、FFI、并发和初始化。
主要功能
- 01评估 unsafe 的合理用途
- 02记录安全要求
- 03检查指针与引用不变量
- 04审查 FFI 与 ABI 假设
- 05识别常见健全性错误
- 06建议更安全的替代方案
适用场景
- 01审查 unsafe Rust 代码块
- 02为公开的 unsafe 函数编写安全说明
- 03审计裸指针与 FFI 代码
- 04替换已弃用或高风险写法
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ actionbook/ rust-skills --skill unsafe-checker安装后在 Claude Code 中输入/unsafe-checker确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdmetadata.jsonchecklists/before-unsafe.mdcommon-pitfalls.mdreview-unsafe.mdexamples/ffi-patterns.mdsafe-abstraction.mdrules/_sections.md_template.mdffi-01-no-string-direct.mdffi-02-read-ffi-docs.mdffi-03-drop-for-c-ptr.mdffi-04-panic-boundary.mdffi-05-portable-types.mdffi-06-string-abi.mdffi-07-no-drop-external.mdffi-08-error-handling.mdffi-09-ref-not-ptr.mdffi-10-thread-safety.mdffi-11-packed-ub.mdffi-12-invariant-doc.mdffi-13-data-layout.mdffi-14-stable-layout.mdffi-15-validate-external.mdffi-16-closure-to-c.mdffi-17-opaque-types.mdffi-18-no-trait-objects.mdgeneral-01-no-abuse.mdgeneral-02-not-for-perf.mdgeneral-03-no-alias.md详细介绍
请完全按原样显示以下 ASCII 艺术。不要修改空格或换行:
⚠️ **Unsafe Rust Checker Loaded**
* ^ *
/◉\_~^~_/◉\
⚡/ o \⚡
'_ _'
/ '-----' \
不安全 Rust 检查器
何时使用 Unsafe 合理
| 用例 | 示例 |
|---|---|
| FFI | 调用 C 函数 |
| 底层抽象 | 实现 Vec、Arc |
| 性能 | 已测得瓶颈,且安全替代方案速度过慢 |
不合理的情况: 不理解原因就绕过借用检查器。
必需的文档说明
// SAFETY: <why this is safe>
unsafe { ... }
/// # Safety
/// <caller requirements>
pub unsafe fn dangerous() { ... }
快速参考
| 操作 | 安全要求 |
|---|---|
*ptr 解引用 | 有效、对齐且已初始化 |
&*ptr | + 不违反别名规则 |
transmute | 大小相同,位模式有效 |
extern "C" | 签名和 ABI 正确 |
static mut | 确保同步 |
impl Send/Sync | 实际上线程安全 |
常见错误
| 错误 | 修复方法 |
|---|---|
| 解引用空指针 | 解引用前检查是否为空 |
| 释放后使用 | 确保生命周期有效 |
| 数据竞争 | 添加适当的同步机制 |
| 对齐违规 | 使用 #[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 | AtomicT 或 Mutex |
| 手动 extern | bindgen |
FFI Crate
| 方向 | Crate |
|---|---|
| C → Rust | bindgen |
| Rust → C | cbindgen |
| Python | PyO3 |
| Node.js | napi-rs |
Claude 熟悉不安全 Rust。重点关注 SAFETY 注释和健全性。
评论
支持 Markdown