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

Macros

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

Structs

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

Enums

Traits

Functions

  • 转发目标 DLL 的所有函数,同时会确保 ordinal 与目标函数一致。这个函数会读取目标 DLL 以获得导出函数信息,因此,要确保目标 DLL 在编译期存在。
  • 转发目标 DLL 的所有函数。与 forward_dll 类似,区别在于这个函数可以指定在编译时的目标 DLL 路径。
  • 转发目标 DLL 的所有函数。与 forward_dll 类似,区别在于这个函数不要求在编译期存在 dll。

Type Aliases

Derive Macros

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