Skip to content

Commit 3d33de1

Browse files
authored
Merge pull request #10 from AntiVM/main
Add arg qemu_binary_name
2 parents 78bdf30 + 0f94242 commit 3d33de1

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

src/lib.rs

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use log::{error, info};
1+
use log::{error, info, debug};
22

33
use memflow::cglue;
44
use memflow::connector::cpu_state::*;
@@ -31,15 +31,23 @@ impl<P: MemoryView + Process> QemuProcfs<P> {
3131
pub fn new<O: Os<IntoProcessType = P>>(
3232
mut os: O,
3333
map_override: Option<CTup2<Address, umem>>,
34+
qemu_binary_name: Option<String>,
3435
) -> Result<Self> {
3536
let mut proc = None;
3637

3738
let callback = &mut |info: ProcessInfo| {
38-
if proc.is_none() && is_qemu(&info) {
39+
40+
let matches = qemu_binary_name
41+
.as_ref()
42+
.map(|nm| &*info.name == nm)
43+
.unwrap_or_else(|| is_qemu(&info));
44+
if proc.is_none() && matches {
45+
debug!("Found QEMU process: {:#?}", info);
3946
proc = Some(info);
4047
}
41-
48+
4249
proc.is_none()
50+
4351
};
4452

4553
os.process_info_list_callback(callback.into())?;
@@ -58,15 +66,21 @@ impl<P: MemoryView + Process> QemuProcfs<P> {
5866
mut os: O,
5967
name: &str,
6068
map_override: Option<CTup2<Address, umem>>,
69+
qemu_binary_name: Option<String>,
6170
) -> Result<Self> {
6271
let mut proc = None;
6372

6473
let callback = &mut |info: ProcessInfo| {
74+
let matches = qemu_binary_name
75+
.as_ref()
76+
.map(|nm| &*info.name == nm)
77+
.unwrap_or_else(|| is_qemu(&info));
6578
if proc.is_none()
66-
&& is_qemu(&info)
79+
&& matches
6780
&& qemu_arg_opt(info.command_line.split_whitespace(), "-name", "guest").as_deref()
6881
== Some(name)
6982
{
83+
debug!("Found QEMU process with guest name '{}': {:#?}", name, info);
7084
proc = Some(info);
7185
}
7286

@@ -202,6 +216,7 @@ fn validator() -> ArgsValidator {
202216
ArgsValidator::new()
203217
.arg(ArgDescriptor::new("map_base").description("override of VM memory base"))
204218
.arg(ArgDescriptor::new("map_size").description("override of VM memory size"))
219+
.arg(ArgDescriptor::new("qemu_binary_name").description("override default QEMU binary name"))
205220
}
206221

207222
/// Creates a new Qemu Procfs instance.
@@ -262,15 +277,20 @@ pub fn create_connector_with_os<O: Os>(
262277
.and_then(|size| umem::from_str_radix(size, 16).ok()),
263278
)
264279
.map(|(start, size)| CTup2(Address::from(start), size));
280+
281+
let qemu_binary_name_override = args
282+
.get("qemu_binary_name")
283+
.map(|s| s.to_string());
284+
265285

266286
if let Some(name) = name.or_else(|| args.get("name")) {
267287
if let Ok(pid) = Pid::from_str_radix(name, 10) {
268288
QemuProcfs::with_pid(os, pid, map_override)
269289
} else {
270-
QemuProcfs::with_guest_name(os, name, map_override)
290+
QemuProcfs::with_guest_name(os, name, map_override, qemu_binary_name_override)
271291
}
272292
} else {
273-
QemuProcfs::new(os, map_override)
293+
QemuProcfs::new(os, map_override, qemu_binary_name_override)
274294
}
275295
}
276296
Err(err) => {

src/qemu_args.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
pub fn is_qemu(process: &memflow::os::process::ProcessInfo) -> bool {
22
let name = &*process.name;
3-
name.contains("qemu-system-") || name == "QEMULauncher"
3+
name.contains("qemu-system-") || name == "QEMULauncher" || name == "kvm"
44
}
55

66
pub fn qemu_arg_opt<'a>(

0 commit comments

Comments
 (0)