【问题标题】:How to create a process and load code into it如何创建进程并将代码加载到其中
【发布时间】:2022-01-27 17:16:39
【问题描述】:

有一个包含程序的字节数组。如何从 rust 代码在新进程中运行它。这是什么类型的:

const PROGRAM: &[u8] = include_bytes!("proxy.exe");

fn main() {
    CreateNewProccess(PROGRAM);
}

【问题讨论】:

    标签: windows winapi rust


    【解决方案1】:

    运行嵌入式可执行文件最直观的方法是将其写入磁盘,即使是临时的,然后才运行它。这是在 Rust 中如何做到这一点的。

    let program = {
        let mut p = std::env::current_dir()?;
        p.push("proxy.exe");
        p
    };
    std::fs::write(&program, PROGRAM)?;
    
    let child = std::process::Command::new(program)
        .spawn()?;
    

    根据您的用例,将可执行文件存储在这样的主程序中可能不值得。

    另见:

    【讨论】:

    • 这并不完全正确。虽然您需要一个磁盘映像来创建进程,但该映像不一定是您打算执行的代码。使用进程空心化,您可以使用任何 PE 映像(例如 notepad.exe)来创建进程对象。
    • 编辑删除了一些假设。 FWIW 这仍然是 Rust 中最直观的方法。
    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多