libdebug.utils package#
Submodules#
libdebug.utils.debugger_wrappers module#
- libdebug.utils.debugger_wrappers.change_state_function_process(method: callable) callable [source]#
Decorator to perfom control flow checks before executing a method.
libdebug.utils.debugging_utils module#
- libdebug.utils.debugging_utils.check_absolute_address(address: int, maps: list[MemoryMap]) bool [source]#
Checks if the specified address is an absolute address.
- Returns:
True if the specified address is an absolute address, False otherwise.
- Return type:
bool
- libdebug.utils.debugging_utils.normalize_and_validate_address(address: int, maps: list[MemoryMap]) int [source]#
Normalizes and validates the specified address.
- Returns:
The normalized address.
- Return type:
int
- Throws:
ValueError: If the specified address does not belong to any memory map.
- libdebug.utils.debugging_utils.resolve_symbol_in_maps(symbol: str, maps: list[MemoryMap]) int [source]#
Returns the address of the specified symbol in the specified memory maps.
- Parameters:
symbol (str) – The symbol whose address should be returned.
maps (list[MemoryMap]) – The memory maps.
- Returns:
The address of the specified symbol in the specified memory maps.
- Return type:
int
- Throws:
ValueError: If the specified symbol does not belong to any memory map.
- libdebug.utils.debugging_utils.resolve_address_in_maps(address: int, maps: list[MemoryMap]) str [source]#
Returns the symbol corresponding to the specified address in the specified memory maps.
- Parameters:
address (int) – The address whose symbol should be returned.
maps (list[MemoryMap]) – The memory maps.
- Returns:
The symbol corresponding to the specified address in the specified memory maps.
- Return type:
str
- Throws:
ValueError: If the specified address does not belong to any memory map.
libdebug.utils.elf_utils module#
- libdebug.utils.elf_utils.resolve_symbol(path: str, symbol: str) int [source]#
Returns the address of the specified symbol in the specified ELF file.
- Parameters:
path (str) – The path to the ELF file.
symbol (str) – The symbol whose address should be returned.
- Returns:
The address of the specified symbol in the specified ELF file.
- Return type:
int
- libdebug.utils.elf_utils.resolve_address(path: str, address: int) str [source]#
Returns the symbol corresponding to the specified address in the specified ELF file.
- Parameters:
path (str) – The path to the ELF file.
address (int) – The address whose symbol should be returned.
- Returns:
The symbol corresponding to the specified address in the specified ELF file.
- Return type:
str
libdebug.utils.gdb module#
libdebug.utils.libcontext module#
- class libdebug.utils.libcontext.LibContext[source]#
Bases:
object
A class that holds the global context of the library.
- property sym_lvl: int#
Property getter for sym_lvl.
- Returns:
the current symbol level.
- Return type:
_sym_lvl (int)
- property debugger_logger: str#
Property getter for debugger_logger.
- Returns:
the current debugger logger level.
- Return type:
_debugger_logger (str)
- property pipe_logger: str#
Property getter for pipe_logger.
- Returns:
the current pipe logger level.
- Return type:
_pipe_logger (str)
- property general_logger: str#
Property getter for general_logger.
- Returns:
the current general logger level.
- Return type:
_general_logger (str)
- property arch: str#
Property getter for architecture.
- Returns:
the current architecture.
- Return type:
_arch (str)
- property terminal: list[str]#
Property getter for terminal.
- Returns:
the current terminal.
- Return type:
_terminal (str)
libdebug.utils.pipe_manager module#
- class libdebug.utils.pipe_manager.PipeManager(stdin_write: int, stdout_read: int, stderr_read: int)[source]#
Bases:
object
Class for managing pipes of the child process.
- timeout_default: int = 2#
- recv(numb: int | None = None, timeout: int = 2) bytes [source]#
Receives at most numb bytes from the child process stdout.
- Parameters:
numb (int, optional) – number of bytes to receive. Defaults to None.
timeout (int, optional) – timeout in seconds. Defaults to timeout_default.
- Returns:
received bytes from the child process stdout.
- Return type:
bytes
- recverr(numb: int | None = None, timeout: int = 2) bytes [source]#
Receives at most numb bytes from the child process stderr.
- Parameters:
numb (int, optional) – number of bytes to receive. Defaults to None.
timeout (int, optional) – timeout in seconds. Defaults to timeout_default.
- Returns:
received bytes from the child process stderr.
- Return type:
bytes
- recvuntil(delims: bytes, occurences: int = 1, drop: bool = False, timeout: int = 2) bytes [source]#
Receives data from the child process stdout until the delimiters are found.
- Parameters:
delims (bytes) – delimiters where to stop.
occurences (int, optional) – number of delimiters to find. Defaults to 1.
drop (bool, optional) – drop the delimiter. Defaults to False.
timeout (int, optional) – timeout in seconds. Defaults to timeout_default.
- Returns:
received data from the child process stdout.
- Return type:
bytes
- recverruntil(delims: bytes, occurences: int = 1, drop: bool = False, timeout: int = 2) bytes [source]#
Receives data from the child process stderr until the delimiters are found.
- Parameters:
delims (bytes) – delimiters where to stop.
occurences (int, optional) – number of delimiters to find. Defaults to 1.
drop (bool, optional) – drop the delimiter. Defaults to False.
timeout (int, optional) – timeout in seconds. Defaults to timeout_default.
- Returns:
received data from the child process stderr.
- Return type:
bytes
- recvline(numlines: int = 1, drop: bool = True, timeout: int = 2) bytes [source]#
Receives numlines lines from the child process stdout.
- Parameters:
numlines (int, optional) – number of lines to receive. Defaults to 1.
drop (bool, optional) – drop the line ending. Defaults to True.
timeout (int, optional) – timeout in seconds. Defaults to timeout_default.
- Returns:
received lines from the child process stdout.
- Return type:
bytes
- recverrline(numlines: int = 1, drop: bool = True, timeout: int = 2) bytes [source]#
Receives numlines lines from the child process stderr.
- Parameters:
numlines (int, optional) – number of lines to receive. Defaults to 1.
drop (bool, optional) – drop the line ending. Defaults to True.
timeout (int, optional) – timeout in seconds. Defaults to timeout_default.
- Returns:
received lines from the child process stdout.
- Return type:
bytes
- send(data: bytes) int [source]#
Sends data to the child process stdin.
- Parameters:
data (bytes) – data to send.
- Returns:
number of bytes sent.
- Return type:
int
- Raises:
RuntimeError – no stdin pipe of the child process.
- sendline(data: bytes) int [source]#
Sends data to the child process stdin and append a newline.
- Parameters:
data (bytes) – data to send.
- Returns:
number of bytes sent.
- Return type:
int
- sendafter(delims: bytes, data: bytes, occurences: int = 1, drop: bool = False, timeout: int = 2) tuple[bytes, int] [source]#
Sends data to the child process stdin after the delimiters are found.
- Parameters:
delims (bytes) – delimiters where to stop.
data (bytes) – data to send.
occurences (int, optional) – number of delimiters to find. Defaults to 1.
drop (bool, optional) – drop the delimiter. Defaults to False.
timeout (int, optional) – timeout in seconds. Defaults to timeout_default.
- Returns:
received data from the child process stdout. int: number of bytes sent.
- Return type:
bytes
- sendlineafter(delims: bytes, data: bytes, occurences: int = 1, drop: bool = False, timeout: int = 2) tuple[bytes, int] [source]#
Sends line to the child process stdin after the delimiters are found.
- Parameters:
delims (bytes) – delimiters where to stop.
data (bytes) – data to send.
occurences (int, optional) – number of delimiters to find. Defaults to 1.
drop (bool, optional) – drop the delimiter. Defaults to False.
timeout (int, optional) – timeout in seconds. Defaults to timeout_default.
- Returns:
received data from the child process stdout. int: number of bytes sent.
- Return type:
bytes
libdebug.utils.posix_spawn module#
libdebug.utils.print_style module#
- class libdebug.utils.print_style.PrintStyle[source]#
Bases:
object
Class to define colors for the terminal.
- RED = '\x1b[91m'#
- BLUE = '\x1b[94m'#
- GREEN = '\x1b[92m'#
- BRIGHT_YELLOW = '\x1b[93m'#
- YELLOW = '\x1b[33m'#
- PINK = '\x1b[95m'#
- CYAN = '\x1b[96m'#
- BOLD = '\x1b[1m'#
- UNDERLINE = '\x1b[4m'#
- STRIKE = '\x1b[9m'#
- DEFAULT_COLOR = '\x1b[39m'#
- RESET = '\x1b[0m'#
libdebug.utils.process_utils module#
- libdebug.utils.process_utils.get_process_maps(process_id: int) list[MemoryMap] [source]#
Returns the memory maps of the specified process.
- Parameters:
process_id (int) – The PID of the process whose memory maps should be returned.
- Returns:
A list of MemoryMap objects, each representing a memory map of the specified process.
- Return type:
list
- libdebug.utils.process_utils.get_open_fds(process_id: int) list[int] [source]#
Returns the file descriptors of the specified process.
- Parameters:
process_id (int) – The PID of the process whose file descriptors should be returned.
- Returns:
A list of integers, each representing a file descriptor of the specified process.
- Return type:
list
libdebug.utils.signal_utils module#
- libdebug.utils.signal_utils.create_signal_mappings() tuple[dict, dict] [source]#
Create mappings between signal names and numbers.
- libdebug.utils.signal_utils.resolve_signal_number(name: str) int [source]#
Resolve a signal name to its number.
- Parameters:
name (str) – the signal name.
- Returns:
the signal number.
- Return type:
int
libdebug.utils.syscall_utils module#
- libdebug.utils.syscall_utils.get_remote_definition_url(arch: str) str [source]#
Get the URL of the remote syscall definition file.
- libdebug.utils.syscall_utils.fetch_remote_syscall_definition(arch: str) dict [source]#
Fetch the syscall definition file from the remote server.
- libdebug.utils.syscall_utils.get_syscall_definitions(arch: str) dict [source]#
Get the syscall definitions for the specified architecture.
- libdebug.utils.syscall_utils.resolve_syscall_number(name: str) int [source]#
Resolve a syscall name to its number.
- libdebug.utils.syscall_utils.resolve_syscall_name(number: int) str [source]#
Resolve a syscall number to its name.