11个稳定版本

1.0.10 2024年1月20日
1.0.9 2023年8月9日
1.0.8 2022年11月23日
1.0.6 2021年8月12日
1.0.0 2020年1月17日

#55 in 内存管理

Download history 41/week @ 2024-03-13 12/week @ 2024-03-27 17/week @ 2024-04-03 10/week @ 2024-04-24 30/week @ 2024-05-01 44/week @ 2024-05-08 20/week @ 2024-05-15 4/week @ 2024-05-22 26/week @ 2024-05-29 20/week @ 2024-06-05 104/week @ 2024-06-12 42/week @ 2024-06-19 129/week @ 2024-06-26

每月301次下载

MIT许可协议

38KB
701 代码行

crates.io docs.rs license dependency status

对进程虚拟内存内容的I/O访问

从/到当前进程和其他进程读取/写入数据。这可以用于进程监控、调试、测试、通信等。

示例

通过此库读取当前运行进程的堆栈

# fn main() -> Result<(), Box<dyn std::error::Error>> {
use process_vm_io::ProcessVirtualMemoryIO;
use std::io::Read;

// Perform I/O on this current process.
let process_id = std::process::id();
let address_of_pid = &process_id as *const _ as u64;
let mut process_io = unsafe { ProcessVirtualMemoryIO::new(process_id, address_of_pid) }?;

// Read the stack of this current thread.
let mut buffer = [0u8; std::mem::size_of::<u32>()];
process_io.read_exact(&mut buffer)?;
let also_pid = u32::from_ne_bytes(buffer);
assert_eq!(process_id, also_pid);
# Ok(())
# }

通过此库写入当前运行进程的堆

# fn main() -> Result<(), Box<dyn std::error::Error>> {
use process_vm_io::ProcessVirtualMemoryIO;
use std::io::{Seek, Write};

// Perform I/O on this current process.
let process_id = std::process::id();
let mut process_io = unsafe { ProcessVirtualMemoryIO::new(process_id, 0) }?;

// Some location on the heap that we will write to.
let mut pid_on_the_heap = Box::new(0_u32);

// Seek to that location and write the PID there.
process_io.seek(std::io::SeekFrom::Start(pid_on_the_heap.as_mut() as *mut _ as u64))?;
process_io.write(&process_id.to_ne_bytes())?;

assert_eq!(process_id, *pid_on_the_heap);
# Ok(())
# }

安全性

内存安全性

向进程的虚拟内存写入是潜在的不安全操作,因为它可能会在该进程中引入内存不安全,并可能导致该进程出现意外状态。如果目标进程是当前运行的进程,这会更加危险。

正在运行的进程

不建议对正在运行的进程执行I/O操作,因为其虚拟内存布局可能随时更改,或者进程可能会简单地终止并消失。在执行I/O之前,考虑暂停指定进程的所有线程。这通常可以通过SIGSTOPSIGCONT POSIX信号来完成。

平台特定说明

目前仅支持Linux。

版本控制

本项目遵循语义版本控制。`CHANGELOG.md`文件详细说明了随时间的变化。

许可协议

版权所有(c)2020-2023 MicroDoc Software GmbH。

请参阅此分发顶层目录中的`LICENSE.txt`文件。

根据MIT许可协议授权。此文件可能不得根据这些条款进行复制、修改或分发。

依赖关系

~2.5–3.5MB
~74K SLoC