You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Unclear that you need to reanalyze between setting a property and getting it back #8689
Is this a general concept that needs to be documented or a specific API?
Large set of API properties/functions
What concept or API needs more documentation?
In many cases, if you set a property and then read it back, you get the old value; the new value only shows up after running analysis.
For example, if I run this as a single console command:
After running the command, the UI automatically reanalyzes, so if I then run:
>>> print(current_function.type)
I get the new one:
int32_t(void* arg1)
This is apparently by design, and it is documented, but the documentation is very vague.
docs/dev/concepts.md says:
This is a convenience the UI does for you just like if you were to change a type or create a function, you almost always want the analysis to be updated. However, in scripts you run yourself as plugins or via the "Run Script" command, you may not get the same results mid-execution until after the entire script is finished running.
This says you "want the analysis to be updated" and "may not get the same results", but it doesn't say how the results differ. I would have expected that updating the analysis would be necessary for the change to propagate to other parts of the binary, perhaps necessary for it to appear in the decompilation; I wouldn't have expected it to be necessary merely to read the thing I just wrote.
Likewise, docs/guide/index.md says:
When you run commands in the scripting console, the UI will automatically update analysis. This is because quite often when you make a change in the console you expect it to be immediately reflected in the UI. The same is not true when running a script where you must trigger bv.update_analysis_and_wait() or current_function.reanalyze() to experience the same behavior.
This makes it sound like skipping reanalysis only prevents changes from appearing "in the UI".
I don't know if there is other documentation I'm missing, but if not, this should be clarified.
Is this documentation related to a specific API?
Affects all, but especially Python where these properties are getters and setters (affecting user expectations).
Are there any known examples of people using this API/concept? #2295 is an example of someone getting confused by this.
Activity