From d80e55c4e386aed0b421827093ad279183582e67 Mon Sep 17 00:00:00 2001 From: theguy147 <37738506+theguy147@users.noreply.github.com> Date: Wed, 19 Apr 2023 21:51:58 +0200 Subject: [PATCH] add `krelease()` function (#1673) --- pwndbg/gdblib/kernel/__init__.py | 11 +++++++++++ tests/qemu-tests/tests/test_qemu_system.py | 12 ++++++++++++ 2 files changed, 23 insertions(+) diff --git a/pwndbg/gdblib/kernel/__init__.py b/pwndbg/gdblib/kernel/__init__.py index 059a9587f..45572b7df 100644 --- a/pwndbg/gdblib/kernel/__init__.py +++ b/pwndbg/gdblib/kernel/__init__.py @@ -1,5 +1,7 @@ import functools import math +import re +from typing import Tuple import gdb @@ -76,6 +78,15 @@ def kversion() -> str: return pwndbg.gdblib.memory.string(version_addr).decode("ascii").strip() +@requires_debug_syms() +@pwndbg.lib.memoize.reset_on_start +def krelease() -> Tuple[int, ...]: + match = re.search(r"Linux version (\d+)\.(\d+)(?:\.(\d+))?", kversion()) + if match: + return tuple(int(x) for x in match.groups() if x) + raise Exception("Linux version tuple not found") + + @requires_debug_syms() @pwndbg.lib.memoize.reset_on_start def is_kaslr_enabled() -> bool: diff --git a/tests/qemu-tests/tests/test_qemu_system.py b/tests/qemu-tests/tests/test_qemu_system.py index 1211b272b..2590713c9 100644 --- a/tests/qemu-tests/tests/test_qemu_system.py +++ b/tests/qemu-tests/tests/test_qemu_system.py @@ -13,3 +13,15 @@ try: except Exception: traceback.print_exc() exit(1) + + +try: + release_ver = pwndbg.gdblib.kernel.krelease() + # release should be int tuple of form (major, minor, patch) or (major, minor) + assert len(release_ver) >= 2 + release_str = "Linux version " + ".".join([str(x) for x in release_ver]) + assert release_str in pwndbg.gdblib.kernel.kversion() + +except Exception: + traceback.print_exc() + exit(1)