dia-rs/.github
Rafael Rivera 62849f08ea
Update dependencies (#25)
2024-08-21 12:28:21 -07:00
..
workflows Update dependencies, simplify bindings generation (#15) 2024-01-19 16:41:35 -08:00
CODE_OF_CONDUCT.md Initial crate 2021-11-18 22:10:59 -08:00
LICENSE-APACHE Initial crate 2021-11-18 22:10:59 -08:00
LICENSE-MIT Initial crate 2021-11-18 22:10:59 -08:00
README.md Update dependencies (#25) 2024-08-21 12:28:21 -07:00
SECURITY.md Initial crate 2021-11-18 22:10:59 -08:00
SUPPORT.md Initial crate 2021-11-18 22:10:59 -08:00

README.md

crates.io

Rust for Debug Interface Access (DIA) SDK

The Microsoft Debug Interface Access Software Development Kit (DIA SDK) provides access to debug information stored in program database (.pdb) files generated by Microsoft postcompiler tools.

Start by adding windows and microsoft-dia dependencies to Cargo.toml:

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

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

Make use of any DIA SDK APIs as needed.

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(())
    }
}