From d04500c6cdf35ccdbcdc8cb17a3339da63fdea0f Mon Sep 17 00:00:00 2001 From: Charif Mostafa Date: Sat, 5 Oct 2024 19:57:27 +0200 Subject: [PATCH] Add klookup command --- pwndbg/commands/__init__.py | 1 + pwndbg/commands/klookup.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 pwndbg/commands/klookup.py diff --git a/pwndbg/commands/__init__.py b/pwndbg/commands/__init__.py index c669fbe2660..2945945c8ed 100644 --- a/pwndbg/commands/__init__.py +++ b/pwndbg/commands/__init__.py @@ -711,6 +711,7 @@ def load_commands() -> None: import pwndbg.commands.kcmdline import pwndbg.commands.kconfig import pwndbg.commands.killthreads + import pwndbg.commands.klookup import pwndbg.commands.kversion import pwndbg.commands.linkmap import pwndbg.commands.memoize diff --git a/pwndbg/commands/klookup.py b/pwndbg/commands/klookup.py new file mode 100644 index 00000000000..b724229e666 --- /dev/null +++ b/pwndbg/commands/klookup.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +import argparse + +import pwndbg.commands +import pwndbg.gdblib.kernel.kallsyms +from pwndbg.color import message +from pwndbg.commands import CommandCategory + +parser = argparse.ArgumentParser(description="Lookup kernel symbols") + +parser.add_argument("symbol", type=str, help="Address or symbol name to lookup") + + +@pwndbg.commands.ArgparsedCommand(parser, category=CommandCategory.KERNEL) +@pwndbg.commands.OnlyWhenQemuKernel +@pwndbg.commands.OnlyWhenPagingEnabled +def klookup(symbol: str) -> None: + ksyms = pwndbg.gdblib.kernel.kallsyms.get() + try: + symbol_addr = int(symbol) + for k, v in ksyms.items(): + if v[0] == symbol_addr: + print(message.success(f"{k} = {symbol_addr:#x}")) + return + print(message.error(f"No symbol found at {symbol_addr:#x}")) + except ValueError: + if symbol in ksyms: + addr = ksyms[symbol][0] + print(message.success(f"{symbol} = {addr:#x}")) + else: + print(message.error(f"No symbol found for {symbol}"))