angr.analyses.decompiler.structuring.sailr¶
- class angr.analyses.decompiler.structuring.sailr.SAILRStructurer¶
Bases:
PhoenixStructurerThe SAILR structuring algorithm is the phoenix-based algorithm from the USENIX 2024 paper SAILR. The entirety of the algorithm is implemented across this class and various optimization passes in the decompiler. To find each optimization class, simply search for optimizations which reference this class.NAME.
At a high-level, SAILR does three things different from the traditional Phoenix schema-based algorithm:
It recursively structures the graph, rather than doing it in a single pass. This allows decisions to be made based on the current state of what the decompilation would look like.
It performs deoptimizations targeting specific optimizations that introduces gotos and mis-structured code. It can only do this because of the recursive nature of the algorithm.
It uses a more advanced heuristic for virtualizing edges, which is implemented in this class.
Additionally, some changes in Phoenix are only activated when SAILR is used.
- __init__(region, improve_phoenix=True, postdom_max_edges=10, postdom_max_graph_size=50, **kwargs)¶