10个版本
0.2.1 | 2023年12月28日 |
---|---|
0.2.0 | 2023年12月25日 |
0.2.0-beta9 | 2023年2月26日 |
0.2.0-beta7 | 2022年7月24日 |
0.0.0 | 2021年12月21日 |
#94 in 内存管理
25 每月下载
在 physpatch 中使用
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