10个版本

0.2.1 2023年12月28日
0.2.0 2023年12月25日
0.2.0-beta92023年2月26日
0.2.0-beta72022年7月24日
0.0.0 2021年12月21日

#94 in 内存管理

25 每月下载
physpatch 中使用

MIT 协议

54KB
951

memflow-qemu

该qemu连接器在Linux进程文件系统之上实现了memflow插件接口。

编译

安装库

安装memflow连接器的推荐方法是使用 memflowup

开发构建

要编译连接器为与memflow插件系统一起使用的动态库,请使用以下命令

cargo build --release --all-features

该插件可以在 target/release/ 目录中找到,并需要将其复制到 memflow默认搜索路径之一

在rust项目中静态链接crate

要在rust项目中使用连接器,只需将其包含在Cargo.toml中

memflow-qemu = "^0.2.0-beta"

参数

target 参数指定了qemu虚拟机的名称(在启动qemu时使用 -name 指定)。

加载连接器时可以使用以下附加参数

  • map_base - 覆盖默认的VM内存基址(可选)
  • map_size - 覆盖默认的VM内存大小(可选)

权限

qemu 连接器需要通过linux procfs访问qemu进程。这意味着加载此连接器的任何进程都需要至少设置ptrace权限。

要设置二进制文件的ptrace权限,请使用以下命令

sudo setcap 'CAP_SYS_PTRACE=ep' [filename]

或者您也可以通过 sudo 运行该二进制文件。

内存映射

连接器通过利用 qemu qmp协议 支持动态获取qemu内存映射。

要在一个虚拟机上启用qmp,只需将其添加到qemu命令行

-qmp unix:/tmp/qmp-my-vm.sock,server,nowait

或者通过tcp服务器公开

-qmp tcp:localhost:12345,server,nowait

或者通过libvirt

<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm">

...

  </devices>
  <qemu:commandline>
    <qemu:arg value="-qmp"/>
    <qemu:arg value="unix:/tmp/qmp-my-vm.sock,server,nowait"/>
  </qemu:commandline>
</domain>

请参阅qemu的qmp手册,以获取有关如何配置此功能的更多信息。

如果qmp未激活或无法获取,连接器将回退到为特定qemu机器类型硬编码的映射表。

运行示例

可以通过以下方式运行与main memflow仓库中的示例类似的示例:

RUST_SETPTRACE=1 cargo run --example read_phys --release
RUST_SETPTRACE=1 cargo run --example ps_win32 --release
RUST_SETPTRACE=1 cargo run --example ps_inventory --release

有关RUST_SETPTRACE的更多信息以及如何运行示例,请参阅main memflow仓库中的运行示例部分。

许可证

根据MIT许可证授权,请参阅LICENSE

贡献

除非您明确声明,否则您有意提交以包含在工作中的任何贡献,均应按上述方式授权,不附加任何额外条款或条件。

依赖项

~8–38MB
~590K SLoC