Source code for memobj.property.string

from typing import Any

from . import MemoryProperty


[docs] class NullTerminatedString(MemoryProperty): def __init__( self, offset: int | None = None, search_size: int = 20, *, encoding: str = "utf-8", ignore_errors: bool = False, ): super().__init__(offset) self.search_size = search_size self.encoding = encoding self.ignore_errors = ignore_errors
[docs] def from_memory(self) -> Any: data = self.process.read_memory( self.offset_address, self.search_size, ) end = data.find(b"\x00") if end == 0: return "" if end == -1: if self.ignore_errors: return "" raise ValueError("No null end found") return data[:end].decode(self.encoding)
[docs] def to_memory(self, value: Any): value = value.encode(self.encoding) + b"\x00" if (value_len := len(value)) > self.search_size: raise ValueError( f"Value was {value_len} while the search_size size is {self.search_size}" ) self.process.write_memory( self.offset_address, value, )
[docs] def memory_size(self) -> int: return self.search_size