Rust DMA基础读写内存 (使用PCILeech)
需要用到的crate:
memprocfs(https://github.com/ufrisk/MemProcFS)
PCILeech是一个可以通过dma读写内存的库,可以通过memprocfs这个库来操作。
memprocfs这个库的wiki在这里:API_Rust · ufrisk/MemProcFS Wiki · GitHub
前置工作
先新建项目并下载crate:
cargo new dma-test;
cd dma-test;
cargo add memprocfs;
代码
连接到pcileech的vmm.dll:
let mut args = ["-printf", "-device", "fpga"].to_vec();
let vmm = Vmm::new("vmm.dll的路径", &args).unwrap();
这里使用fpga设备,也可以根据需求改成USB3380,其他参数请到memprocfs的wiki查询
示例: 寻找进程以及基址
if let Ok(processes) = vmm.process_list() {
for process in processes {
if let Ok(info) = process.info() {
if info.name == "示例.exe" {
return Some(process);
}
}
}
}
获取基址:
process.get_module_base("示例.exe").unwrap();
示例:读写内存
读内存和写内存就分别用vmm::mem_read和vmm::mem_write两个方法进行
此外,memprocfs还提供了vmm::mem_read_as和mem_write_as两个泛型方法,直接可以传入结构体进行读取和写入