Rust for Debug Interface Access (DIA) SDK
Перейти к файлу
Rafael Rivera 8f7353141a
Add IDiaSourceFile::get_checksum metadata, sample (#20)
2024-03-27 09:10:54 -07:00
.github
.metadata Add IDiaSourceFile::get_checksum metadata, sample (#20) 2024-03-27 09:10:54 -07:00
.windows Add IDiaSourceFile::get_checksum metadata, sample (#20) 2024-03-27 09:10:54 -07:00
crates/samples Add IDiaSourceFile::get_checksum metadata, sample (#20) 2024-03-27 09:10:54 -07:00
src Add IDiaSourceFile::get_checksum metadata, sample (#20) 2024-03-27 09:10:54 -07:00
.gitattributes
.gitignore
Cargo.toml
build.rs
license-apache-2.0
license-mit

.github/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.53.0"
features = [
    "Win32_System_Com"
]

[dependencies.microsoft-dia]
version = "0.10.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(())
    }
}