{"record":{"id":"f5fb65ff589e4cd1","repo":"NationalSecurityAgency/ghidra","slug":"cannot-convert-s-value-type-f5fb65","errorCode":null,"errorMessage":"Cannot convert {}'s value: '{}', type: '{}'","messagePattern":"Cannot convert (.+?)'s value: '(.+?)', type: '(.+?)'","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"Ghidra/Debug/Debugger-agent-x64dbg/src/main/py/src/ghidraxdbg/arch.py","lineNumber":184,"sourceCode":"    return memory_mappers[lang]\n\n\nclass DefaultRegisterMapper(object):\n\n    def __init__(self, byte_order: str) -> None:\n        if not byte_order in ['big', 'little']:\n            raise ValueError(\"Invalid byte_order: {}\".format(byte_order))\n        self.byte_order = byte_order\n\n    def map_name(self, proc: int, name: str):\n        return name\n\n    def map_value(self, proc: int, name: str, value: int):\n        try:\n            # TODO: this seems half-baked\n            av = value.to_bytes(8, \"big\")\n        except Exception:\n            raise ValueError(\"Cannot convert {}'s value: '{}', type: '{}'\"\n                             .format(name, value, type(value)))\n        return RegVal(self.map_name(proc, name), av)\n\n    def map_name_back(self, proc: int, name: str) -> str:\n        return name\n\n    def map_value_back(self, proc: int, name: str, value: bytes):\n        return RegVal(self.map_name_back(proc, name), value)\n\n\nclass Intel_x86_64_RegisterMapper(DefaultRegisterMapper):\n\n    def __init__(self):\n        super().__init__('little')\n\n    def map_name(self, proc, name):\n        if name is None:\n            return 'UNKNOWN'","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/NationalSecurityAgency/ghidra/blob/d5f144c24d6bc53c9cbf4448c6d11143e7696206/Ghidra/Debug/Debugger-agent-x64dbg/src/main/py/src/ghidraxdbg/arch.py#L166-L202","documentation":"Raised by DefaultRegisterMapper.map_value when value.to_bytes(8, 'big') raises an exception. The method attempts to serialize an integer register value into 8 bytes in big-endian order; if the value is not an int, is negative, or exceeds 2**64-1, to_bytes fails and the broad except re-raises as ValueError.","triggerScenarios":"map_value(proc, name, value) is called during register-read operations. value.to_bytes(8, 'big') fails because value is None, a string, a negative integer, or an integer larger than 2**64-1.","commonSituations":"The x64dbg plugin returned a non-integer register value (e.g. a hex string or None for an unavailable register). A register value overflow for wide registers (e.g. AVX-512) that exceeds 64 bits. A mismatch between the debugger-reported register type and the expected int.","solutions":["Ensure value is a non-negative int that fits in 8 bytes before calling map_value.","Handle None or unavailable register values upstream before they reach map_value.","Override map_value in the language-specific mapper to handle wider registers or type coercion."],"exampleFix":"# before: passing a non-int or oversized value\nrv = mapper.map_value(proc, 'rax', '0xDEADBEEF')  # string fails to_bytes\n\n# after: coerce to int, clamp to 64-bit\nval = int(value, 0) if isinstance(value, str) else value\nif val < 0:\n    val = val & 0xFFFFFFFFFFFFFFFF\nrv = mapper.map_value(proc, 'rax', val)","handlingStrategy":"validation","validationCode":"if not isinstance(value, int) or value < 0 or value > 0xFFFFFFFFFFFFFFFF:\n    raise ValueError(\n        f\"Register value must be a non-negative int <= 2**64-1, got {value!r} ({type(value)})\")","typeGuard":"def is_valid_reg_value(val) -> bool:\n    return isinstance(val, int) and 0 <= val <= 0xFFFFFFFFFFFFFFFF","tryCatchPattern":"try:\n    rv = mapper.map_value(proc, name, value)\nexcept ValueError:\n    # attempt coercion: parse hex strings, mask negatives\n    val = int(value, 0) if isinstance(value, str) else int(value)\n    val = val & 0xFFFFFFFFFFFFFFFF\n    rv = mapper.map_value(proc, name, val)","preventionTips":["Ensure register values are non-negative ints fitting in 64 bits before calling map_value.","Handle None or unavailable register values upstream.","Override map_value in language-specific mappers for wider registers or special types."],"tags":["x64dbg","debugger-agent","register-mapper","valueerror","type-conversion"],"backgroundTag":null,"analyzedSha":"d5f144c24d6bc53c9cbf4448c6d11143e7696206","analyzedAt":"2026-08-14T01:00:57.564Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}