further optimizations

pull/3390/head
jxuanli 1 month ago
parent 6fde305fbc
commit ac34ad5d37

@ -116,10 +116,13 @@ def first_kernel_ro_page() -> pwndbg.lib.memory.Page | None:
if base is None: if base is None:
return None return None
banner = pwndbg.aglib.symbol.lookup_symbol_addr("linux_banner")
fallback_mappings = [] fallback_mappings = []
for mapping in pwndbg.aglib.kernel.vmmap.kernel_vmmap_pages(): for mapping in pwndbg.aglib.kernel.vmmap.kernel_vmmap_pages():
if mapping.vaddr < base: if mapping.vaddr < base:
continue continue
if banner is not None and banner in mapping:
return mapping
if not mapping.read or mapping.write or mapping.execute: if not mapping.read or mapping.write or mapping.execute:
fallback_mappings.append(mapping) fallback_mappings.append(mapping)
continue continue
@ -148,6 +151,8 @@ def kconfig() -> pwndbg.lib.kernel.kconfig.Kconfig | None:
config_end = pwndbg.aglib.symbol.lookup_symbol_addr("kernel_config_data_end") config_end = pwndbg.aglib.symbol.lookup_symbol_addr("kernel_config_data_end")
else: else:
mapping = first_kernel_ro_page() mapping = first_kernel_ro_page()
if mapping is None:
return None
result = next(pwndbg.search.search(b"IKCFG_ST", mappings=[mapping]), None) result = next(pwndbg.search.search(b"IKCFG_ST", mappings=[mapping]), None)
if result is not None: if result is not None:
@ -173,7 +178,7 @@ def kcmdline() -> str:
@pwndbg.lib.cache.cache_until("start") @pwndbg.lib.cache.cache_until("start")
def kversion() -> str: def kversion() -> str | None:
try: try:
if has_debug_symbols("linux_banner"): if has_debug_symbols("linux_banner"):
version_addr = pwndbg.aglib.symbol.lookup_symbol_addr("linux_banner") version_addr = pwndbg.aglib.symbol.lookup_symbol_addr("linux_banner")

@ -196,7 +196,10 @@ class x86_64PagingInfo(ArchPagingInfo):
try: try:
target = self.physmap.to_bytes(8, byteorder="little") target = self.physmap.to_bytes(8, byteorder="little")
mapping = pwndbg.aglib.kernel.first_kernel_ro_page() mapping = pwndbg.aglib.kernel.first_kernel_ro_page()
result = next(pwndbg.search.search(target, mappings=[mapping]), None) result = next(
pwndbg.search.search(target, mappings=[mapping], aligned=pwndbg.aglib.arch.ptrsize),
None,
)
except Exception as e: except Exception as e:
print(e) print(e)
pass pass

Loading…
Cancel
Save