Expand description
forward-dll 是一个辅助构造转发 DLL 的库。
§Example 1
在 build.rs 中添加如下代码:
use forward_dll::forward_dll;
forward_dll("C:\\Windows\\System32\\version.dll").unwrap();这将会读取目标 DLL 的导出表,然后使用 cargo:rustc-* 输出来链接到目标 DLL。这种方式可以连带 ordinal 一起转发。
§Example 2
这种方式是在运行时动态加载目标 DLL,然后在导出的函数中,跳转到目标 DLL 的地址。
use forward_dll::ForwardModule;
#[derive(ForwardModule)]
#[forward(target = "C:\\Windows\\system32\\version.dll")]
pub struct VersionModule;
const VERSION_LIB: VersionModule = VersionModule;
#[no_mangle]
pub extern "system" fn DllMain(_inst: isize, reason: u32, _: *const u8) -> u32 {
if reason == 1 {
println!("==> version.dll loaded");
VERSION_LIB.init().unwrap();
println!("==> version.dll initialized");
}
1
}Modules§
Macros§
- forward_
dll - 生成转发的导出函数,以及初始化方法,须在 DllMain 中调用初始化方法,以使生成的函数指向转发的目标函数。
Structs§
- DllForwarder
- DLL 转发类型的具体实现。该类型不要自己实例化,应调用 forward_dll 宏生成具体的实例。
Enums§
Traits§
- Forward
Module - 由过程宏实现的 trait。
Functions§
- forward_
dll - 转发目标
DLL的所有函数,同时会确保ordinal与目标函数一致。这个函数会读取目标DLL以获得导出函数信息,因此,要确保目标DLL在编译期存在。 - forward_
dll_ with_ dev_ path - 转发目标
DLL的所有函数。与forward_dll类似,区别在于这个函数可以指定在编译时的目标DLL路径。 - forward_
dll_ with_ exports - 转发目标
DLL的所有函数。与forward_dll类似,区别在于这个函数不要求在编译期存在 dll。
Type Aliases§
Derive Macros§
- Forward
Module - ForwardModule 派生宏。用于读取 DLL 的导出表,生成用于转发的导出函数。