|
|
|
|
@ -61,17 +61,19 @@ def xinfo_mmap_file(page: Page, addr: int) -> None:
|
|
|
|
|
|
|
|
|
|
file_name = page.objfile
|
|
|
|
|
|
|
|
|
|
objpages = filter(lambda p: p.objfile == file_name, pwndbg.aglib.vmmap.get())
|
|
|
|
|
first = sorted(objpages, key=lambda p: p.vaddr)[0]
|
|
|
|
|
region_start = pwndbg.aglib.vmmap.addr_region_start(addr)
|
|
|
|
|
if region_start is None:
|
|
|
|
|
print("The file is not contiguous in memory.")
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
# print offset from ELF base load address
|
|
|
|
|
rva = addr - first.vaddr
|
|
|
|
|
print_line("File (Base)", addr, first.vaddr, rva, "+")
|
|
|
|
|
rva = addr - region_start
|
|
|
|
|
print_line("File (Base)", addr, region_start, rva, "+")
|
|
|
|
|
|
|
|
|
|
# find possible LOAD segments that designate memory and file backings
|
|
|
|
|
containing_loads = [
|
|
|
|
|
seg
|
|
|
|
|
for seg in pwndbg.aglib.elf.get_containing_segments(file_name, first.vaddr, addr)
|
|
|
|
|
for seg in pwndbg.aglib.elf.get_containing_segments(file_name, region_start, addr)
|
|
|
|
|
if seg["p_type"] == "PT_LOAD"
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
@ -89,7 +91,7 @@ def xinfo_mmap_file(page: Page, addr: int) -> None:
|
|
|
|
|
else:
|
|
|
|
|
print(f"{'File (Disk)'.rjust(20)} {M.get(addr)} = [not file backed]")
|
|
|
|
|
|
|
|
|
|
containing_sections = pwndbg.aglib.elf.get_containing_sections(file_name, first.vaddr, addr)
|
|
|
|
|
containing_sections = pwndbg.aglib.elf.get_containing_sections(file_name, region_start, addr)
|
|
|
|
|
if len(containing_sections) > 0:
|
|
|
|
|
print("\n Containing ELF sections:")
|
|
|
|
|
for sec in containing_sections:
|
|
|
|
|
|