Fix kernel-vmmap qemu detection (#2652)

* fix vmmap message

* lint
pull/2684/head
patryk4815 12 months ago committed by GitHub
parent 4e0f8a999e
commit 6890f2f291
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -30,8 +30,8 @@ import pwndbg.lib.memory
class QemuMachine(Machine):
def __init__(self):
super().__init__()
self.pid = QemuMachine.get_qemu_pid()
self.file = None
self.pid = QemuMachine.get_qemu_pid()
self.file = os.open(f"/proc/{self.pid}/mem", os.O_RDONLY)
def __del__(self):
@ -57,11 +57,16 @@ class QemuMachine(Machine):
@staticmethod
def get_qemu_pid():
out = subprocess.check_output(["pgrep", "qemu-system"], encoding="utf8")
pids = out.strip().split("\n")
try:
out = subprocess.check_output(["pgrep", "qemu-system"], encoding="utf8")
pids = out.strip().split("\n")
if len(pids) == 1:
return int(pids[0], 10)
if len(pids) == 1:
return int(pids[0], 10)
except subprocess.CalledProcessError:
# If no process with the name `qemu-system` is found, fallback to alternative methods,
# as the binary name may vary (e.g., `qemu_system`).
pass
# We add a chardev file backend (we dont add a fronted, so it doesn't affect
# the guest). We can then look through proc to find which process has the file
@ -75,7 +80,7 @@ class QemuMachine(Machine):
pwndbg.dbg.selected_inferior().send_monitor(f"chardev-remove {chardev_id}")
if not pid_found:
raise Exception("Could not find qemu pid")
raise ProcessLookupError("Could not find qemu-system pid")
return int(pid_found, 10)
@ -120,6 +125,15 @@ def kernel_vmmap_via_page_tables() -> Tuple[pwndbg.lib.memory.Page, ...]:
)
)
return ()
except ProcessLookupError:
print(
M.error(
"Could not find the PID for process named `qemu-system`.\n"
"This might happen if pwndbg is running on a different machine than `qemu-system`,\n"
"or if the `qemu-system` binary has a different name."
)
)
return ()
arch = pwndbg.aglib.arch.current
if arch == "aarch64":

Loading…
Cancel
Save