lucid
lucid copied to clipboard
[Lucid Reloaded]: New features, QoL updates, fixes + enhancements
Originally this started out as a personal side project of mine that I didn't expect to do much work on. But just like that, before you know it.. I ended up rewriting a majority of Lucid and majorly improved performance! Lucid is one of my most-used plugins in IDA, so this is my way of showing appreciation to @gaasedelen for his amazing work :)
Considering I never planned on doing this much work, there may be some changes that are not listed below.
Changelist Pt. I
-
Bumped version number up to 0.2
-
Added my username to the list of authors when Lucid is loaded
-
Cleaned up LOTS of code, but there's still plenty of work to be done
-
Modernized some of the Python to 3.x (TODO: type hinting!!!)
-
Fixed quite a few bugs within the code that would cause exceptions, especially under different platforms (like MIPS)
- Resolves: #3
-
Added 'Developer mode' checkbox for showing additional information of instructions.
-
Added 'Refresh view' button to force a refresh of the microcode viewer.
-
Added ability to navigate the lines within the explorer using the keyboard :)
-
Added some more block flags to display + changed formatting up a bit
-
Fixed the microcode view not being updated when the pseudocode is refreshed
-
Sub-instruction graph is now fully synchronized with the microcode view, and will update in realtime
-
Optimized generation of TokenCell objects and their derivatives
-
Created specialized helper classes for iterating through tokens
-
Created specialized helper class for registering/notifying callbacks
-
Miscellaneous QoL improvements that may not be listed here
-
Probably introduced a random bug or two (or five) somewhere.. only one way to find out! ;)
Changelist Pt. II
-
No longer hangs when loading into very large functions
-
Different maturity levels will now be loaded when the user requests them
-
Added a queue system for handling pending maturity level changes
- [X] ~~TODO: Fix cursor synchronization between maturity levels - it was fully dependent on expecting every maturity level to be available at once...~~ [resolved: 7d624bae0]
Changelist Pt. III
-
Fixed cursor synchronization between maturity levels 💯
-
Fixed support for reloading the plugin while IDA is open 👌
-
Bumped version number up to 0.2.3
-
Added 'unload' methods to classes where needed in order for them to unregister any dependencies.
-
Added a 'hotload state' that can be retrieved and later set to restore the environment prior to reloading.
- TODO: Delegate loading/saving to the classes + add more stuff to save/restore
-
Added some additional info to the 'recursive reload' function when the "OH NOO" condition is met 😆
-
Removed assertion preventing moves from far-away maturity levels
- As originally stated in the comments, it wasn't strictly necessary, and the code works just fine without it 👍