1
0
mirror of synced 2024-11-15 02:17:36 +01:00
Commit Graph

55 Commits

Author SHA1 Message Date
Jennifer Taylor
337440cb14 Handle decompiling bytecode which does not use function call results properly. 2021-05-16 22:18:23 +00:00
Jennifer Taylor
afb5eaa6fb Add todo to fix decompiling some Pop'n animation bytecodes. 2021-05-15 04:23:04 +00:00
Jennifer Taylor
26c2a99a6e Tie up loose ends by adding TODOs and documentation for a few remaining bits in decompiler. 2021-05-11 17:01:35 +00:00
Jennifer Taylor
ee3e272787 Properly plumb verbosity flags to all of decompiler pieces, clean up some code. 2021-05-10 00:12:28 +00:00
Jennifer Taylor
da1dba8f2b Implement GET_TIME opcode used by some DDR PS3 files. 2021-05-09 19:18:48 +00:00
Jennifer Taylor
2252390706 Implement one more opcode needed for some Bishi levels. 2021-05-06 19:37:55 +00:00
Jennifer Taylor
b81d2aeaae Fix one last case where we can get surprise gotos. 2021-05-05 19:32:08 +00:00
Jennifer Taylor
203fdd3a10 Fix tricky case where we have nowhere to jump to after a While loop inside an if. 2021-05-05 19:31:45 +00:00
Jennifer Taylor
481c5a50ce Implement one more opcode that I've seen in Bishi levels. 2021-05-05 00:57:31 +00:00
Jennifer Taylor
9544287b13 Deal with empty if statements (usually compiled-out debug switches). 2021-05-05 00:56:59 +00:00
Jennifer Taylor
25278d76c5 Fix stack walking bug with respect to pre-converted if statements. 2021-05-05 00:56:33 +00:00
Jennifer Taylor
f75b9f038e Implement a few more opcodes to get a few more Bishi files decompiling. 2021-05-05 00:55:02 +00:00
Jennifer Taylor
636e1876bc Add while loop detection and conversion. 2021-05-05 00:54:34 +00:00
Jennifer Taylor
2f79a6401d Fix massive bug which dropped function calls without returns from the finished output. 2021-05-05 00:53:58 +00:00
Jennifer Taylor
f09fd79a45 Add for loop detection and conversion. 2021-05-05 00:53:38 +00:00
Jennifer Taylor
e17f7c2bdb Add some tests for for/while loops in anticipation of optimizing output. 2021-05-05 00:53:02 +00:00
Jennifer Taylor
83f4f43e9e Implement a few more opcodes, fix stack ordering with multiple entries after reconciliation. 2021-05-04 02:32:32 +00:00
Jennifer Taylor
eddb8dc208 Several more code output optimizations done. 2021-05-04 02:32:04 +00:00
Jennifer Taylor
44b3628a85 Fix logic error in merging stacks when if statements didn't have a true and false body. 2021-05-04 02:31:07 +00:00
Jennifer Taylor
4790385022 Fix a logic error in if statement unwrapping, remove duplicated code in favor of a better true/false detection algorithm. 2021-05-04 02:30:37 +00:00
Jennifer Taylor
108d7c228d Handle having bytecode with no actual entries. 2021-05-04 02:29:53 +00:00
Jennifer Taylor
54b4c88d65 It seems that some bytecode leaves extra stuff on the stack sometimes, I think this is fine? 2021-05-04 02:29:27 +00:00
Jennifer Taylor
70c7448aa0 Fix nasty bug where sometimes we would have gotos without corresponding labels. 2021-05-02 03:50:48 +00:00
Jennifer Taylor
336ef6fc3d Check in some beta code for a new style of if detection that does not work yet. 2021-05-02 03:50:19 +00:00
Jennifer Taylor
7493db034f Add in basic throw, test code generation of mostly the same code as we tested the code graph with. 2021-05-02 03:49:35 +00:00
Jennifer Taylor
829597a871 Address the fact that I never handled END actions (they end processing as they are encountered). 2021-05-02 03:48:38 +00:00
Jennifer Taylor
261c3d7fbd Start a unit test framework for decompilation, in the hopes of eventually tracking down a logic bug in if extraction. 2021-05-02 03:48:07 +00:00
Jennifer Taylor
820a86845d Fix shallowest successor find when multiple nodes lead to the same location, fix if swap optimization and add BITAND and NOT_BITAND if support. 2021-04-26 03:24:47 +00:00
Jennifer Taylor
8cf219cb25 Avoid duplicating labels outside of and inside of do-while statements. Avoid going to or generating negative labels (artificially inserted nodes). 2021-04-26 03:24:24 +00:00
Jennifer Taylor
b7523b5521 Fix if processing by getting rid of negation early optimization. There was a path that
was negating but not being checked when doing the final render, leaving some if statements
inverted. Moved the optimization to a final pass for more generalized correctness.
2021-04-26 02:50:19 +00:00
Jennifer Taylor
2d4f6cadfb Much more complicated stack walking algorithm that chains the stack through chunks and also calculates when temporary variables are needed. 2021-04-26 01:28:48 +00:00
Jennifer Taylor
4d0bfe5637 Fix an edge case in if detection where we reused IDs incorrectly by stopping the reuse of IDs. Also, convert returns much earlier in the stack. 2021-04-26 01:27:51 +00:00
Jennifer Taylor
06bd9d1245 Fix logic error where we lost if statement jump points because __gather_chunks was too-aggressively dropping end pointers. 2021-04-26 01:26:50 +00:00
Jennifer Taylor
6f78668e9a Fix up exceptions and add more invariant checks to loop generation code. 2021-04-26 01:25:32 +00:00
Jennifer Taylor
5761474bec Enforce another invariant for dominator calculation that would have caught another hard-to-find bug. 2021-04-26 01:24:25 +00:00
Jennifer Taylor
a09ad70de5 Improve a lot of exception message, enforce several more invariants in
graph generation that would have caught previous bugs, fix possible
issue with loop/dominator code if the entry code chunk was the beginning
of a loop.
2021-04-26 01:23:54 +00:00
Jennifer Taylor
44f5e5cdcc Fix control flow graph splitting function to handle functions that jump to the end offset as a way of exiting early. 2021-04-26 01:23:08 +00:00
Jennifer Taylor
6323ef9adf Implment several more opcodes in actual decompilation step. 2021-04-26 01:22:39 +00:00
Jennifer Taylor
6052deed3c Refactor code generation step to allow for nested function definitions, actually hook those up. 2021-04-26 01:22:14 +00:00
Jennifer Taylor
3a9b3a7b3c Pass indentation context into expression rendering for upcoming function definition support. 2021-04-26 01:21:42 +00:00
Jennifer Taylor
51e27c0cff Enhance goto eliminiation to remove all unneeded gotos. 2021-04-24 19:37:14 +00:00
Jennifer Taylor
964d6f082c Clean up types on If statement, stop using strings to pass information. 2021-04-24 19:36:58 +00:00
Jennifer Taylor
534ab20f98 Add dead code eliminiation so dominators doesn't fail. Fix a tricky jump case with if statements. 2021-04-24 18:13:07 +00:00
Jennifer Taylor
de84379ad0 Implement a lot more opcodes for expressions, fix an if conditional, improve while display. 2021-04-24 18:11:20 +00:00
Jennifer Taylor
cc27d2418e Fix register display on assignment, add a few optimizing passes to clean up code. 2021-04-24 18:10:27 +00:00
Jennifer Taylor
f1aea996c4 Handle if-goto pattern that I previously neglected. 2021-04-24 18:09:44 +00:00
Jennifer Taylor
6221d0273b Overhauled statement eval system so we always get back a list of statements. 2021-04-24 18:08:04 +00:00
Jennifer Taylor
b0778e1110 Convert expression rendering to an explicit function so we can retain __repr__ for debugging. 2021-04-24 18:07:01 +00:00
Jennifer Taylor
f2761b90b0 Restructure a lot of types to fit an expression/statement model and making a lot of stuff make more sense. 2021-04-24 18:05:58 +00:00
Jennifer Taylor
19c6de1fcc Actually decompile basic bytecode. There's much left to do, but some basics work! 2021-04-24 18:05:03 +00:00