|
|
|
|
@ -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:
|
|
|
|
|
@ -534,7 +541,9 @@ class Aarch64PagingInfo(ArchPagingInfo):
|
|
|
|
|
if value == 0xFFFFFFFFFFFFFFFF:
|
|
|
|
|
break
|
|
|
|
|
return tuple(sections)
|
|
|
|
|
vmalloc_end = min(self.vmemmap, self.pci, self.fixmap)
|
|
|
|
|
vmalloc_end = None
|
|
|
|
|
if self.vmemmap and self.pci and self.fixmap:
|
|
|
|
|
vmalloc_end = min(self.vmemmap, self.pci, self.fixmap)
|
|
|
|
|
return (
|
|
|
|
|
(self.USERLAND, 0),
|
|
|
|
|
(None, self.PAGE_OFFSET),
|
|
|
|
|
@ -565,6 +574,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:
|
|
|
|
|
|