This misses some structures. Another way might be to search register disp in every functions, meaning that a structure offset is accessed. From there using reverse-propagation we can find every structure creation / entry point (is structure from stack, from parameters, returned by a function..). We can now propagate every structure present in the binary. The only problem is that we do not have information to merge duplicates, leading to create multiple times the same structure.
Finding heuristic to identify duplicates from this state would be interesting.
Structures are identified from 2 entry points:
This misses some structures. Another way might be to search register disp in every functions, meaning that a structure offset is accessed. From there using reverse-propagation we can find every structure creation / entry point (is structure from stack, from parameters, returned by a function..). We can now propagate every structure present in the binary. The only problem is that we do not have information to merge duplicates, leading to create multiple times the same structure.
Finding heuristic to identify duplicates from this state would be interesting.