try: from typing import Any, Optional, Tuple except ImportError: pass RISCV_GP_REGS_COUNT = 32 PRSTATUS_SIZE = 204 PRSTATUS_OFFSET_PR_CURSIG = 12 PRSTATUS_OFFSET_PR_PID = 24 PRSTATUS_OFFSET_PR_REG = 72 ELF_GREGSET_T_SIZE = 128 PrStruct = Struct( Padding(PRSTATUS_OFFSET_PR_CURSIG), 'pr_cursig' / Int16ul, Padding(PRSTATUS_OFFSET_PR_PID - PRSTATUS_OFFSET_PR_CURSIG - Int16ul.sizeof()), 'pr_pid' / Int32ul, Padding(PRSTATUS_OFFSET_PR_REG - PRSTATUS_OFFSET_PR_PID - Int32ul.sizeof()), 'regs' / Int32ul[RISCV_GP_REGS_COUNT], Padding(PRSTATUS_SIZE - PRSTATUS_OFFSET_PR_REG - ELF_GREGSET_T_SIZE)) class RiscvMethodsMixin(BaseArchMethodsMixin): @staticmethod def get_registers_from_stack(data, grows_down): # type: (bytes, bool) -> Tuple[list[int], Optional[dict[int, int]]] regs = Int32ul[RISCV_GP_REGS_COUNT].parse(data) if not grows_down: raise ESPCoreDumpLoaderError( 'Growing up stacks are not supported for now!') return regs, None
def checksum_16(data): c = 0 for i in range(len(data) // 2): c = c + (data[i * 2 + 1] << 8) + data[i * 2] return c & 0xFFFF WriteCommand = Struct("address" / Int16ul, "value" / Int16ul) WriteMessageRequest = Struct( "fields" / RawCopy( Struct( "length" / Rebuild( Int16ul, len_(this.items) * WriteCommand.sizeof() // Int16ul.sizeof() + 2, ), "command" / Const(vlxDevConstants.WS_WEB_UI_COMMAND_WRITE_DATA, Int16ul), "items" / WriteCommand[len_(this.items)], )), "checksum" / Checksum(Int16ul, lambda data: checksum_16(data), this.fields.data), ) ReadTableResponse = GreedyRange(Int16ub) ReadTableRequest = Struct( "fields" / RawCopy( Struct(