dewolf
dewolf copied to clipboard
[Crash][Operations] AttributeError: 'UnknownExpression' object has no attribute 'size'
What happened?
Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib64/python3.10/threading.py", line 1016, in _bootstrap_inner
self.run()
File "/home/user/.tools/binaryninja/plugins/../python/binaryninja/plugin.py", line 928, in run
self.task.run()
File "/home/user/.binaryninja/plugins/dewolf/__init__.py", line 41, in run
decompile(self.bv, self.function)
File "/home/user/.binaryninja/plugins/dewolf/__init__.py", line 24, in decompile
task = decompiler.decompile(function, options)
File "/home/user/.binaryninja/plugins/dewolf/decompile.py", line 55, in decompile
pipeline.run(task)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/pipeline.py", line 97, in run
instance.run(task)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/preprocessing/register_pair_handling.py", line 40, in run
self._def_map, self._use_map, self._locations = self._parse_cfg(self.cfg)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/preprocessing/register_pair_handling.py", line 57, in _parse_cfg
use_map.add(instruction)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/structures/maps.py", line 51, in add
self._map[used].add(instruction)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/structures/pseudo/expressions.py", line 64, in __hash__
return hash(repr(self))
File "/home/user/.binaryninja/plugins/dewolf/decompiler/structures/pseudo/instructions.py", line 173, in __repr__
return f"{repr(self._destination)} = {repr(self._value)}"
File "/home/user/.binaryninja/plugins/dewolf/decompiler/structures/pseudo/operations.py", line 187, in __repr__
return f"{self.operation.name} [{','.join(map(repr, self._operands))}] {self.type}"
File "/home/user/.binaryninja/plugins/dewolf/decompiler/structures/pseudo/operations.py", line 240, in type
return max(operand_types, key=lambda type: type.size)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/structures/pseudo/operations.py", line 240, in <lambda>
return max(operand_types, key=lambda type: type.size)
AttributeError: 'UnknownExpression' object has no attribute 'size'
How to reproduce?
decompile main() of curl
binary
curl.zip
Affected Binary Ninja Version(s)
3.1.3703-dev (Build ID 2713759a)
Version 3.1.3469 (Build ID 93650e26) yields the following crash:
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib64/python3.10/threading.py", line 1016, in _bootstrap_inner
self.run()
File "/home/user/.tools/binaryninja/plugins/../python/binaryninja/plugin.py", line 928, in run
self.task.run()
File "/home/user/.binaryninja/plugins/dewolf/__init__.py", line 41, in run
decompile(self.bv, self.function)
File "/home/user/.binaryninja/plugins/dewolf/__init__.py", line 24, in decompile
task = decompiler.decompile(function, options)
File "/home/user/.binaryninja/plugins/dewolf/decompile.py", line 55, in decompile
pipeline.run(task)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/pipeline.py", line 97, in run
instance.run(task)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/preprocessing/missing_definitions.py", line 99, in run
self.insert_missing_definitions()
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/preprocessing/missing_definitions.py", line 133, in insert_missing_definitions
self._insert_definition_if_undefined(variable, previous_ssa_labels, undefined_variables)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/preprocessing/missing_definitions.py", line 158, in _insert_definition_if_undefined
self._insert_definition_of_aliased(variable, previous_ssa_labels)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/preprocessing/missing_definitions.py", line 173, in _insert_definition_of_aliased
self._check_definition_is_insertable(variable)
File "/home/user/.binaryninja/plugins/dewolf/decompiler/pipeline/preprocessing/missing_definitions.py", line 286, in _check_definition_is_insertable
raise ValueError(error_message)
ValueError: Memory version 30 does not exist. So we can not insert the definition of the aliased variable data_2df80#30.
/cib
Branch issue-121-_Crash_Operations_AttributeError_UnknownExpression_object_has_no_attribute_size created!
binaryninja.types.EnumerationType
gets lifted as UnknownExpression
(lift_unknown()
). This leads to Operation.type
being an UnknownExpression
and therefore AttributeError happens.
Fix: lift EnumerationType
as CustomType
by registering in TypeHandler