#nt #windows #apiset

no-std nt-apiset

Windows 10及以后版本的API集映射文件解析器

1个不稳定版本

0.1.0 2023年6月9日

#264 in Windows API

MIT/Apache

32KB
447 代码行

nt-apiset

crates.io docs.rs license: MIT OR Apache-2.0

由 Colin Finck <[email protected]>

Windows 10及以后版本的API集映射文件解析器。

API集是名称以"api-"或"ext-"开头的PE可执行文件的依赖项,例如 api-ms-win-core-sysinfo-l1-1-0。它们并不是真正的DLL文件。相反,当加载该PE可执行文件时,操作系统会检查API集映射文件,以确定依赖项(在这种情况下:kernelbase.dll)所属的真实库文件。

最显著的API集映射文件是 apisetschema.dll

示例

要获取上述 api-ms-win-core-sysinfo-l1-1-0 后面的真实库文件,您可以使用此crate如下

let dll = std::fs::read("apisetschema.dll")?;
let pe_file = PeFile::from_bytes(&dll)?;
let map = ApiSetMap::try_from_pe64(pe_file)?;

let namespace_entry = map.find_namespace_entry("api-ms-win-core-sysinfo-l1-1-0")??;
let value_entry = namespace_entry.value_entries()?.next()?;

let name = namespace_entry.name()?;
let default_value = value_entry.value()?;
println!("{name} -> {default_value}");

其他资源

此解析器基于许多人的研究,应在此处列出

致谢

此crate献给RE1 RRX火车,它给了我很多时间(以及经常是计划外的时间)来工作。

依赖项

~3MB
~50K SLoC