From 3d7bd9b7845d6b906c8cb1f6c7c2683371f81f92 Mon Sep 17 00:00:00 2001 From: jxuanli Date: Thu, 6 Nov 2025 12:29:33 -0800 Subject: [PATCH] handle `kbase == None` --- pwndbg/aglib/kernel/kallsyms.py | 3 +++ pwndbg/aglib/kernel/paging.py | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/pwndbg/aglib/kernel/kallsyms.py b/pwndbg/aglib/kernel/kallsyms.py index c0fe21fd6..4c3bb8580 100644 --- a/pwndbg/aglib/kernel/kallsyms.py +++ b/pwndbg/aglib/kernel/kallsyms.py @@ -44,6 +44,9 @@ class Kallsyms: def __init__(self): self.kallsyms: List[Tuple[str, str, int]] = [] self.kbase = pwndbg.aglib.kernel.kbase() + if self.kbase is None: + print(M.warn("could not find kbase, kernel has not finished initialization?")) + return mapping = pwndbg.aglib.kernel.first_kernel_ro_page() assert mapping is not None, "kernel memory mappings are missing" diff --git a/pwndbg/aglib/kernel/paging.py b/pwndbg/aglib/kernel/paging.py index c5e6ff91b..01b73e153 100644 --- a/pwndbg/aglib/kernel/paging.py +++ b/pwndbg/aglib/kernel/paging.py @@ -91,6 +91,8 @@ class ArchPagingInfo: raise NotImplementedError() def kbase_helper(self, address): + if address is None: + return None for mapping in kernel_vmmap_pages(): # should be page aligned -- either from pt-dump or info mem @@ -220,7 +222,10 @@ class x86_64PagingInfo(ArchPagingInfo): @property @pwndbg.lib.cache.cache_until("stop") def kbase(self): - return self.kbase_helper(pwndbg.aglib.kernel.get_idt_entries()[0].offset) + idt_entries = pwndbg.aglib.kernel.get_idt_entries() + if len(idt_entries) == 0: + return None + return self.kbase_helper(idt_entries[0].offset) @property def page_shift(self) -> int: @@ -290,10 +295,10 @@ class x86_64PagingInfo(ArchPagingInfo): def handle_kernel_pages(self, pages): kernel_idx = None + kbase = self.kbase for i, page in enumerate(pages): - if kernel_idx is None and self.kbase in page: + if kernel_idx is None and kbase is not None and kbase in page: kernel_idx = i - kbase = self.kbase if kernel_idx is None: return has_loadable_driver = False @@ -384,6 +389,8 @@ class Aarch64PagingInfo(ArchPagingInfo): @property @pwndbg.lib.cache.cache_until("stop") def module_start(self): + if self.kbase is None: + return None res = None for page in kernel_vmmap_pages()[::-1]: if page.start >= self.kbase: @@ -565,6 +572,8 @@ class Aarch64PagingInfo(ArchPagingInfo): return " ".join(name.strip().split()[:-1]) def handle_kernel_pages(self, pages): + if self.kbase is None: + return for i in range(len(pages)): page = pages[i] if page.start > self.kbase + self.ksize: