You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Rust程序执行过程间分析以检测非安全性问题

Rust项目非安全性扫描的问题与技术需求

我正在扫描Rust项目中的*非安全性(unsoundness)*问题,已取得一定进展,但遇到了技术瓶颈。以下是一个典型的问题代码示例:

pub struct HeaderView {
    pub inner: *mut htslib::bcf_hdr_t,
}

impl HeaderView {
    pub fn new(inner: *mut htslib::bcf_hdr_t) -> Self {
        HeaderView { inner }
    }

    #[inline]
    fn inner(&self) -> htslib::bcf_hdr_t {
        unsafe { *self.inner }
    }

    /// Get vector of sample names defined in the header.
    pub fn samples(&self) -> Vec<&[u8]> {
        let names =
            unsafe { slice::from_raw_parts(self.inner().samples, self.sample_count() as usize) };
        names
            .iter()
            .map(|name| unsafe { ffi::CStr::from_ptr(*name).to_bytes() })
            .collect()
    }
}

非安全性问题分析

在这个案例中,samples函数的风险根源在于inner函数的非安全性实现:

  • inner函数直接解引用原始指针,属于Rust中的unsafe操作,但未对指针有效性做任何校验
  • 用户可通过公开的new函数或inner字段传入空指针创建HeaderView实例,调用inner函数会直接触发未定义行为(UB)

当前困境与技术需求

目前仅能扫描公开(pub)函数(如samples),但无法系统性识别inner这类非公开的非安全性函数。计划为Rust构建*过程间控制流图(ICFG)*来执行过程间分析,但面临以下疑问:

  • 工具选型:LLVM层面的分析会丢失Rust特有的unsafe标记信息,且未找到成熟的MIR层面过程间分析工具
  • 源码内联:如何通过内联Rust源码的方式,解决跨函数分析的难题

内容的提问来源于stack exchange,提问作者廖文昭

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:39:58