Skip to content

Decompilation and Disassembly fail when function argument type is changed #1553

Description

@tedanvosin

Description

Decompilation is cleared out when the argument type of a function is changed. Disassembly also becomes inaccessible.

Error:

ERROR    | 2025-12-16 16:10:05,591 | angr.analyses.analysis | Caught and logged AssertionError with resilience:
ERROR    | 2025-12-16 16:10:05,764 | angr.analyses.analysis | Caught and logged AssertionError with resilience:
Error calling Python override of QPlainTextEdit::event(): Traceback (most recent call last):
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qccode_edit.py", line 199, in event
    return super().event(event)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qccode_edit.py", line 267, in keyPressEvent
    mnu = self.get_context_menu()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qccode_edit.py", line 138, in get_context_menu
    under_cursor = self.node_under_cursor()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qccode_edit.py", line 124, in node_under_cursor
    current_node = doc.get_node_at_position(pos)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/documents/qcodedocument.py", line 54, in get_node_at_position
    if self._codegen is not None and self._codegen.map_pos_to_node is not None:
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/data/object_container.py", line 83, in __getattr__
    return getattr(self._am_obj, item)
AttributeError: Error calling Python override of QPlainTextEdit::keyPressEvent(): 'NoneType' object has no attribute 'map_pos_to_node'
Error calling Python override of QFrame::keyPressEvent(): Traceback (most recent call last):
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/views/disassembly_view.py", line 304, in keyPressEvent
    self.toggle_disasm_view()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/views/disassembly_view.py", line 623, in toggle_disasm_view
    self.display_linear_viewer(prefer)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/views/disassembly_view.py", line 653, in display_linear_viewer
    self._linear_viewer.show_instruction(next(iter(self.infodock.selected_insns)))
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 279, in show_instruction
    self.navigate_to_addr(insn_addr)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 291, in navigate_to_addr
    self.navigate_to(floor_region_offset + offset_into_region)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 295, in navigate_to
    self.prepare_objects(offset, start_line=0)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angr/utils/timing.py", line 72, in timed_func
    return func(*args, **kwargs)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 409, in prepare_objects
    is_cached, qobject = self._obj_to_paintable(obj_addr, obj)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 523, in _obj_to_paintable
    qobject = QLinearBlock(
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock.py", line 436, in __init__
    super().__init__(*args, **kwargs)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock.py", line 79, in __init__
    self._init_widgets()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock.py", line 308, in _init_widgets
    self._init_disassembly_block_widgets()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock.py", line 287, in _init_disassembly_block_widgets
    obj = QBlockCode(
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock_code.py", line 83, in __init__
    self.update_document()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock_code.py", line 96, in update_document
    self.obj.render_to_doc(cur)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/block_code_objects/base_objects.py", line 133, in render_to_doc
    obj.render_to_doc(cursor)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/block_code_objects/base_objects.py", line 133, in render_to_doc
    obj.render_to_doc(cursor)
AttributeError: 'NoneType' object has no attribute 'render_to_doc'
Error calling Python override of QGraphicsView::viewportEvent(): Traceback (most recent call last):
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qgraph.py", line 53, in viewportEvent
    return super().viewportEvent(event)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 52, in wheelEvent
    self.area.wheelEvent(event)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 173, in wheelEvent
    self.prepare_objects(self.offset, start_line=self._start_line_in_object - lines)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angr/utils/timing.py", line 72, in timed_func
    return func(*args, **kwargs)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 409, in prepare_objects
    is_cached, qobject = self._obj_to_paintable(obj_addr, obj)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qlinear_viewer.py", line 523, in _obj_to_paintable
    qobject = QLinearBlock(
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock.py", line 436, in __init__
    super().__init__(*args, **kwargs)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock.py", line 79, in __init__
    self._init_widgets()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock.py", line 308, in _init_widgets
    self._init_disassembly_block_widgets()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock.py", line 287, in _init_disassembly_block_widgets
    obj = QBlockCode(
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock_code.py", line 83, in __init__
    self.update_document()
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/qblock_code.py", line 96, in update_document
    self.obj.render_to_doc(cur)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/block_code_objects/base_objects.py", line 133, in render_to_doc
    obj.render_to_doc(cursor)
  File "/Users/tedan/.pyenv/versions/3.10.18/lib/python3.10/site-packages/angrmanagement/ui/widgets/block_code_objects/base_objects.py", line 133, in render_to_doc
    obj.render_to_doc(cursor)
AttributeError: Error calling Python override of QGraphicsView::wheelEvent(): 'NoneType' object has no attribute 'render_to_doc'

file.zip

Steps to reproduce the bug

Load the binary and change the argument type of function _print_box from unsigned long long to char *.

Environment

No response

Additional context

No response

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions