Skip to content

paging ¤

Classes:

Functions:

Attributes:

INVALID_ADDR module-attribute ¤

INVALID_ADDR = 1 << 64

PageTableLevel dataclass ¤

PageTableLevel(name: str, entry: int, virt: int, idx: int)

Attributes:

name instance-attribute ¤

name: str

entry instance-attribute ¤

entry: int

virt instance-attribute ¤

virt: int

idx instance-attribute ¤

idx: int

PageTableScan ¤

PageTableScan(pi: ArchPagingInfo, is_kernel: bool)

Methods:

Attributes:

MAX_SAME_PG_TABLE_ENTRY class-attribute instance-attribute ¤

MAX_SAME_PG_TABLE_ENTRY = 16

paging_level instance-attribute ¤

paging_level = paging_level

PAGE_ENTRY_MASK instance-attribute ¤

PAGE_ENTRY_MASK = PAGE_ENTRY_MASK

PAGE_INDEX_LEN instance-attribute ¤

PAGE_INDEX_LEN = PAGE_INDEX_LEN

PAGE_INDEX_MASK instance-attribute ¤

PAGE_INDEX_MASK = PAGE_INDEX_MASK

page_shift instance-attribute ¤

page_shift = page_shift

pageentry_flags instance-attribute ¤

pageentry_flags = pageentry_flags

should_stop_pagewalk instance-attribute ¤

should_stop_pagewalk = should_stop_pagewalk

result instance-attribute ¤

result: list[Page] = []

pagesz instance-attribute ¤

pagesz = 1 << page_shift

counters instance-attribute ¤

counters: dict[int, int] = {}

ptrsize instance-attribute ¤

ptrsize = ptrsize

inf instance-attribute ¤

inf = selected_inferior()

fmt instance-attribute ¤

fmt = '<' + ('Q' if ptrsize == 8 else 'I') * (pagesz // ptrsize)

cache instance-attribute ¤

cache: dict[int, list[int]] = {}

level_idxes instance-attribute ¤

level_idxes = [0] * (paging_level + 1)

curr instance-attribute ¤

curr = None

is_kernel instance-attribute ¤

is_kernel = is_kernel

arch instance-attribute ¤

arch = name

scan ¤

scan(entry: int, level_remaining: int) -> None

walk ¤

walk(target: int, entry: int) -> list[PageTableLevel]

ArchPagingInfo ¤

Methods:

Attributes:

USERLAND class-attribute instance-attribute ¤

USERLAND = 'userland'

KERNELLAND class-attribute instance-attribute ¤

KERNELLAND = 'kernel [.text]'

KERNELRO class-attribute instance-attribute ¤

KERNELRO = 'kernel [.rodata]'

KERNELBSS class-attribute instance-attribute ¤

KERNELBSS = 'kernel [.bss]'

KERNELDRIVER class-attribute instance-attribute ¤

KERNELDRIVER = 'kernel [.driver .bpf]'

ESPSTACK class-attribute instance-attribute ¤

ESPSTACK = 'espfix'

PHYSMAP class-attribute instance-attribute ¤

PHYSMAP = 'physmap'

VMALLOC class-attribute instance-attribute ¤

VMALLOC = 'vmalloc'

VMEMMAP class-attribute instance-attribute ¤

VMEMMAP = 'vmemmap'

STRUCT_PAGE_SIZE property ¤

STRUCT_PAGE_SIZE: int

STRUCT_PAGE_SHIFT property ¤

STRUCT_PAGE_SHIFT: int

physmap property ¤

physmap: int

vmalloc property ¤

vmalloc: int

vmemmap property ¤

vmemmap: int

kbase property ¤

kbase: int

page_shift property ¤

page_shift: int

paging_level property ¤

paging_level: int

PAGE_ENTRY_MASK property ¤

PAGE_ENTRY_MASK: int

PAGE_INDEX_LEN property ¤

PAGE_INDEX_LEN: int

PAGE_INDEX_MASK property ¤

PAGE_INDEX_MASK: int

phys_offset property ¤

phys_offset: int

va_bits property ¤

va_bits: int

pagetable_level_names property ¤

pagetable_level_names: tuple[str, ...]

adjust ¤

adjust(name: str) -> str

markers ¤

markers() -> tuple[tuple[str, int], ...]

handle_kernel_pages ¤

handle_kernel_pages(pages: tuple[Page, ...]) -> None

kbase_helper ¤

kbase_helper(address: int) -> int | None

pagewalk ¤

pagewalk(target: int, entry: int | None) -> tuple[PageTableLevel, ...]

pagetable_scan ¤

pagetable_scan(entry: int | None = None) -> list[Page]

scan_pagetable ¤

scan_pagetable(entry: int, is_kernel: bool) -> PageTableScan | None

pagewalk_helper ¤

pagewalk_helper(target: int, entry: int) -> tuple[PageTableLevel, ...]

pagetable_scan_helper ¤

pagetable_scan_helper(entry: int, is_kernel: bool = False) -> list[Page]

pageentry_bitflags ¤

pageentry_bitflags(level: int) -> BitFlags

should_stop_pagewalk ¤

should_stop_pagewalk(level: int) -> bool

pageentry_flags ¤

pageentry_flags(entry: int) -> int

x86_64PagingInfo ¤

Bases: ArchPagingInfo

Methods:

Attributes:

pagetable_level_names property ¤

pagetable_level_names: tuple[str, ...]

va_bits property ¤

va_bits: int

physmap property ¤

physmap: int

kbase property ¤

kbase: int | None

page_shift property ¤

page_shift: int

vmalloc property ¤

vmalloc: int

vmemmap property ¤

vmemmap: int

paging_level property ¤

paging_level: int

USERLAND class-attribute instance-attribute ¤

USERLAND = 'userland'

KERNELLAND class-attribute instance-attribute ¤

KERNELLAND = 'kernel [.text]'

KERNELRO class-attribute instance-attribute ¤

KERNELRO = 'kernel [.rodata]'

KERNELBSS class-attribute instance-attribute ¤

KERNELBSS = 'kernel [.bss]'

KERNELDRIVER class-attribute instance-attribute ¤

KERNELDRIVER = 'kernel [.driver .bpf]'

ESPSTACK class-attribute instance-attribute ¤

ESPSTACK = 'espfix'

PHYSMAP class-attribute instance-attribute ¤

PHYSMAP = 'physmap'

VMALLOC class-attribute instance-attribute ¤

VMALLOC = 'vmalloc'

VMEMMAP class-attribute instance-attribute ¤

VMEMMAP = 'vmemmap'

STRUCT_PAGE_SIZE property ¤

STRUCT_PAGE_SIZE: int

STRUCT_PAGE_SHIFT property ¤

STRUCT_PAGE_SHIFT: int

PAGE_ENTRY_MASK property ¤

PAGE_ENTRY_MASK: int

PAGE_INDEX_LEN property ¤

PAGE_INDEX_LEN: int

PAGE_INDEX_MASK property ¤

PAGE_INDEX_MASK: int

phys_offset property ¤

phys_offset: int

get_vmalloc_vmemmap_bases ¤

get_vmalloc_vmemmap_bases() -> tuple[int, int]

markers ¤

markers() -> tuple[tuple[str, int], ...]

adjust ¤

adjust(name: str) -> str

handle_kernel_pages ¤

handle_kernel_pages(pages: tuple[Page, ...]) -> None

pagewalk ¤

pagewalk(target: int, entry: int | None) -> tuple[PageTableLevel, ...]

pagetable_scan ¤

pagetable_scan(entry: int | None = None) -> list[Page]

pageentry_bitflags ¤

pageentry_bitflags(_: int) -> BitFlags

should_stop_pagewalk ¤

should_stop_pagewalk(entry: int) -> bool

pageentry_flags ¤

pageentry_flags(entry: int) -> int

kbase_helper ¤

kbase_helper(address: int) -> int | None

scan_pagetable ¤

scan_pagetable(entry: int, is_kernel: bool) -> PageTableScan | None

pagewalk_helper ¤

pagewalk_helper(target: int, entry: int) -> tuple[PageTableLevel, ...]

pagetable_scan_helper ¤

pagetable_scan_helper(entry: int, is_kernel: bool = False) -> list[Page]

Aarch64PagingInfo ¤

Aarch64PagingInfo()

Bases: ArchPagingInfo

Methods:

Attributes:

VMEMMAP_START instance-attribute ¤

VMEMMAP_START = None

VMEMMAP_SIZE instance-attribute ¤

VMEMMAP_SIZE = None

PAGE_OFFSET instance-attribute ¤

PAGE_OFFSET = None

pagetable_level_names property ¤

pagetable_level_names: tuple[str, ...]

tcr_el1 property ¤

tcr_el1: BitFlags

va_bits property ¤

va_bits: int

va_bits_min property ¤

va_bits_min: int

vmalloc property ¤

vmalloc: int

physmap property ¤

physmap: int

kbase property ¤

kbase: int

kversion property ¤

kversion: tuple[int, ...] | None

module_start property ¤

module_start: int

vmemmap property ¤

vmemmap: int

pci property ¤

pci: int

fixmap property ¤

fixmap: int

ksize property ¤

ksize: int

page_shift_heuristic property ¤

page_shift_heuristic: int

page_shift property ¤

page_shift: int

page_shift_user property ¤

page_shift_user: int

paging_level property ¤

paging_level: int

phys_offset property ¤

phys_offset: int

USERLAND class-attribute instance-attribute ¤

USERLAND = 'userland'

KERNELLAND class-attribute instance-attribute ¤

KERNELLAND = 'kernel [.text]'

KERNELRO class-attribute instance-attribute ¤

KERNELRO = 'kernel [.rodata]'

KERNELBSS class-attribute instance-attribute ¤

KERNELBSS = 'kernel [.bss]'

KERNELDRIVER class-attribute instance-attribute ¤

KERNELDRIVER = 'kernel [.driver .bpf]'

ESPSTACK class-attribute instance-attribute ¤

ESPSTACK = 'espfix'

PHYSMAP class-attribute instance-attribute ¤

PHYSMAP = 'physmap'

VMALLOC class-attribute instance-attribute ¤

VMALLOC = 'vmalloc'

VMEMMAP class-attribute instance-attribute ¤

VMEMMAP = 'vmemmap'

STRUCT_PAGE_SIZE property ¤

STRUCT_PAGE_SIZE: int

STRUCT_PAGE_SHIFT property ¤

STRUCT_PAGE_SHIFT: int

PAGE_ENTRY_MASK property ¤

PAGE_ENTRY_MASK: int

PAGE_INDEX_LEN property ¤

PAGE_INDEX_LEN: int

PAGE_INDEX_MASK property ¤

PAGE_INDEX_MASK: int

markers ¤

markers() -> tuple[tuple[str, int], ...]

adjust ¤

adjust(name: str) -> str

handle_kernel_pages ¤

handle_kernel_pages(pages: tuple[Page, ...]) -> None

pagewalk ¤

pagewalk(target: int, entry: int | None) -> tuple[PageTableLevel, ...]

pagetable_scan ¤

pagetable_scan(entry: int | None = None) -> list[Page]

pageentry_bitflags ¤

pageentry_bitflags(level: int) -> BitFlags

should_stop_pagewalk ¤

should_stop_pagewalk(entry: int) -> bool

pageentry_flags ¤

pageentry_flags(entry: int) -> int

kbase_helper ¤

kbase_helper(address: int) -> int | None

scan_pagetable ¤

scan_pagetable(entry: int, is_kernel: bool) -> PageTableScan | None

pagewalk_helper ¤

pagewalk_helper(target: int, entry: int) -> tuple[PageTableLevel, ...]

pagetable_scan_helper ¤

pagetable_scan_helper(entry: int, is_kernel: bool = False) -> list[Page]

first_kernel_page_start ¤

first_kernel_page_start() -> int