#Microsoft #PDB #访问 #接口 #SDK #DIA

Microsoft-DIA

Rust 调试接口访问 (DIA) SDK

9 个重大版本

新功能 0.11.0 2024 年 8 月 21 日
0.10.0 2024 年 2 月 25 日
0.8.0 2023 年 6 月 9 日
0.6.0 2023 年 3 月 29 日
0.0.0 2021 年 11 月 18 日

112调试 中排名第 112

Download history 19/week @ 2024-07-04 44/week @ 2024-07-25 8/week @ 2024-08-01 83/week @ 2024-08-15

137 每月下载量

MIT/Apache

7.5MB
13K SLoC

包含(Windows DLL,3.5MB).windows/arm64/msdia140.dll,(Windows DLL,2MB).windows/x64/msdia140.dll,(Windows DLL,1.5MB).windows/x86/msdia140.dll,(DOS 可执行文件,145KB).windows/winmd/Microsoft.Dia.winmd,(静态库,2KB).windows/arm64/msdia140.lib,(静态库,2KB).windows/x64/msdia140.lib及其他更多

crates.io

Rust 调试接口访问 (DIA) SDK

Microsoft 调试接口访问软件开发工具包 (DIA SDK) 提供了对由 Microsoft 后编译工具生成的程序数据库 (.pdb) 文件中存储的调试信息的访问。

首先,将 windowsmicrosoft-dia 依赖项添加到 Cargo.toml

[dependencies.windows]
version = "0.58.0"
features = [
    "Win32_System_Com"
]

[dependencies.microsoft-dia]
version = "0.11.0"

根据需要使用任何 DIA SDK API。

use microsoft_dia::{nsfRegularExpression, DiaSource, IDiaDataSource, SymTagFunction};
use windows::{core::*, Win32::System::Com::{CoInitializeEx, COINIT_MULTITHREADED}};

fn main() -> windows::core::Result<()> {
    unsafe {
        CoInitializeEx(None, COINIT_MULTITHREADED)?;

        let source: IDiaDataSource = microsoft_dia::helpers::NoRegCoCreate(s!("msdia140.dll"), &DiaSource)?;
        let executable = std::env::current_exe().unwrap();
        source.loadDataForExe(&HSTRING::from(executable.as_os_str()), None, None)?;

        let session = source.openSession()?;
        let symbols = session.globalScope()?.findChildren(SymTagFunction, w!("sample_functions::*"), nsfRegularExpression.0 as u32)?;

        println!("Function symbols found in sample_functions::* ({}):", &executable.to_string_lossy());

        for i in 0..symbols.Count()? {
            println!("\t{}", symbols.Item(i as u32)?.name()?);
        }

        Ok(())
    }
}

依赖项

~129MB
~2M SLoC