1个不稳定版本
0.1.0 | 2023年6月9日 |
---|
#264 in Windows API
32KB
447 代码行
nt-apiset
由 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}");
其他资源
此解析器基于许多人的研究,应在此处列出
-
https://www.geoffchappell.com/studies/windows/win32/apisetschema/index.htm
Geoff Chappell对API集映射文件格式的原始研究,涵盖所有版本,直至Windows 7。 -
https://lucasg.github.io/2017/10/15/Api-set-resolution/
Lucas Georges详细博客文章中关于Windows 10如何使用API集映射的所有信息。 -
https://apisets.info
Mark Jansen的在线浏览器,用于获取各种Windows版本中apisetschema.dll
文件的信息。
致谢
此crate献给RE1 RRX火车,它给了我很多时间(以及经常是计划外的时间)来工作。
依赖项
~3MB
~50K SLoC