Crate forward_dll

Crate forward_dll 

Source
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§

utils

Macros§

forward_dll
生成转发的导出函数,以及初始化方法,须在 DllMain 中调用初始化方法,以使生成的函数指向转发的目标函数。

Structs§

DllForwarder
DLL 转发类型的具体实现。该类型不要自己实例化,应调用 forward_dll 宏生成具体的实例。

Enums§

ForwardError

Traits§

ForwardModule
由过程宏实现的 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§

ForwardResult

Derive Macros§

ForwardModule
ForwardModule 派生宏。用于读取 DLL 的导出表,生成用于转发的导出函数。