Skip to content

arch ¤

Classes:

Functions:

Attributes:

EndianType module-attribute ¤

EndianType = Literal['little', 'big']

FMT_LITTLE_ENDIAN module-attribute ¤

FMT_LITTLE_ENDIAN = {1: 'B', 2: '<H', 4: '<I', 8: '<Q'}

FMT_BIG_ENDIAN module-attribute ¤

FMT_BIG_ENDIAN = {1: 'B', 2: '>H', 4: '>I', 8: '>Q'}

registered_architectures module-attribute ¤

registered_architectures: dict[
    PWNDBG_SUPPORTED_ARCHITECTURES_TYPE, PwndbgArchitecture
] = {}

all_arches module-attribute ¤

PwndbgArchitecture ¤

PwndbgArchitecture(name: PWNDBG_SUPPORTED_ARCHITECTURES_TYPE)

Bases: ArchDefinition

This class defines the context of the currently debugged architecture as well as other related information of the platform.

This includes the following information: - Capstone/Unicorn constants - ABI information

Methods:

  • update

    While debugging a process, certain aspects of the architecture can change.

  • pack
  • unpack
  • pack_size
  • unpack_size
  • get_capstone_constants

    Return tuple of (CAPSTONE ARCH, CAPSTONE MODE) used to instantiate the Capstone disassembler for this architecture.

  • read_thumb_bit

    Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Attributes:

max_instruction_size instance-attribute ¤

max_instruction_size: int

endian instance-attribute ¤

endian: EndianType

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

name instance-attribute ¤

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int] | None

Return tuple of (CAPSTONE ARCH, CAPSTONE MODE) used to instantiate the Capstone disassembler for this architecture.

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

AMD64Arch ¤

AMD64Arch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 16

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

i386Arch ¤

i386Arch()

Bases: PwndbgArchitecture

32-bit mode x86

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 16

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

i8086Arch ¤

i8086Arch()

Bases: PwndbgArchitecture

16-bit mode x86

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 16

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

ArmArch ¤

ArmArch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 4

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

ArmCortexArch ¤

ArmCortexArch()

Bases: PwndbgArchitecture

Cortex-M processors run the M-profile Arm architecture. This architecture is prevalent in bare-metal/embedded systems that lack operating systems. Only Thumb-2 instructions are supported, and the Thumb bit is always 1.

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 4

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1]

On Cortex-M processors, the Thumb bit is architecturally defined to be 1.

This is the (xpsr >> 24) & 1, which is always 1.

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

AArch64Arch ¤

AArch64Arch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 4

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

PowerPCArch ¤

PowerPCArch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 4

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

SparcArch ¤

SparcArch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 4

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

RISCV32Arch ¤

RISCV32Arch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 22

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

RISCV64Arch ¤

RISCV64Arch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 22

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

MipsArch ¤

MipsArch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 8

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

Loongarch64Arch ¤

Loongarch64Arch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 4

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

S390xArch ¤

S390xArch()

Bases: PwndbgArchitecture

Methods:

Attributes:

max_instruction_size class-attribute instance-attribute ¤

max_instruction_size = 6

name instance-attribute ¤

ptrsize instance-attribute ¤

ptrsize: int

Pointer size in bytes

endian instance-attribute ¤

endian: EndianType

platform instance-attribute ¤

platform: Platform

attributes instance-attribute ¤

attributes: list[ArchAttribute]

ptrbits instance-attribute ¤

ptrbits: int

Pointer size in bits

ptrmask instance-attribute ¤

ptrmask: int

function_abi instance-attribute ¤

function_abi: ABI | None

syscall_abi instance-attribute ¤

syscall_abi: SyscallABI | None

sigreturn_abi instance-attribute ¤

sigreturn_abi: SyscallABI | None

fmts instance-attribute ¤

fmts: dict[int, str]

fmt instance-attribute ¤

fmt: str

get_capstone_constants ¤

get_capstone_constants(address: int) -> tuple[int, int]

update ¤

update(arch_definition: ArchDefinition) -> None

While debugging a process, certain aspects of the architecture can change.

For example: - Some architectures can change endianness dynamically.

pack ¤

pack(integer: int) -> bytes

unpack ¤

unpack(data: bytes) -> int

pack_size ¤

pack_size(integer: int, size: int) -> bytes

unpack_size ¤

unpack_size(data: bytes, size: int) -> int

read_thumb_bit ¤

read_thumb_bit() -> Literal[0, 1, None]

Return 0 or 1, representing the status of the Thumb bit in the current Arm architecture

Return None if the Thumb bit is not relevent to the current architecture

register_arch ¤

register_arch(arch: PwndbgArchitecture)

get_pwndbg_architecture ¤

get_pwndbg_architecture(
    name: PWNDBG_SUPPORTED_ARCHITECTURES_TYPE,
) -> PwndbgArchitecture | None

get_thumb_mode_string ¤

get_thumb_mode_string() -> Literal['arm', 'thumb'] | None

update ¤

update() -> None