add `krelease()` function (#1673)

pull/1680/head
theguy147 3 years ago committed by GitHub
parent 758fb9cb82
commit d80e55c4e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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:

@ -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)

Loading…
Cancel
Save