Supporting `module_mem` offset recovery for kernel version >= `6.15` (#3305)

pull/3307/head
jxuanli 3 months ago committed by GitHub
parent 32a7a5b6ac
commit 9b6cbeb906
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -54,7 +54,7 @@ def module_mem_offset() -> Tuple[int | None, int | None, int | None]:
for i in range(0x100):
offset = i * pwndbg.aglib.arch.ptrsize
min_size = 0x10
if pwndbg.aglib.kernel.krelease() >= (6, 13):
if (6, 13) <= pwndbg.aglib.kernel.krelease() < (6, 15):
min_size += 0x8
for module_memory_size in (
min_size,
@ -71,10 +71,12 @@ def module_mem_offset() -> Tuple[int | None, int | None, int | None]:
found = False
break
size_offset = pwndbg.aglib.arch.ptrsize
if pwndbg.aglib.kernel.krelease() >= (6, 13):
if (6, 13) <= pwndbg.aglib.kernel.krelease() < (6, 15):
# https://elixir.bootlin.com/linux/v6.13/source/include/linux/module.h#L368
# additional fields were added
size_offset += pwndbg.aglib.arch.ptrsize + 4
elif (6, 15) <= pwndbg.aglib.kernel.krelease():
size_offset += 4
size = pwndbg.aglib.memory.u32(mem_ptr + size_offset)
if not 0 < size < 0x100000:
found = False

Loading…
Cancel
Save