From 59af3294c99abc267cfbc44c03d4e4c47dfe01a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Feb 2021 18:17:40 +0100 Subject: [PATCH] Fixed showing register assignment of exception on catch in catch. --- .../flash/abc/avm2/graph/AVM2Graph.java | 66 ++++++++---------- .../avm2/instructions/stack/PushScopeIns.java | 21 +++++- .../bin/as3_cross_compile.air.swf | Bin 4120 -> 4221 bytes .../bin/as3_cross_compile.flex.swf | Bin 5642 -> 5767 bytes .../bin/as3_cross_compile.flex_apache.swf | Bin 5609 -> 5779 bytes .../bin/as3_cross_compile.swftools.swf | Bin 2511 -> 2575 bytes .../testdata/as3_cross_compile/src/Main.as | 1 + .../src/tests/TestTryCatchTry.as | 34 +++++++++ 8 files changed, 83 insertions(+), 39 deletions(-) create mode 100644 libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryCatchTry.as diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java index b4a9f9f70..971d8262c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/graph/AVM2Graph.java @@ -319,7 +319,7 @@ public class AVM2Graph extends Graph { localData.pushDefaultPart.put(e, prevFinallyEndPart); } else if (ins.definition instanceof JumpIns) { } else { - if(localData.pushDefaultPart.containsKey(e)){ + if (localData.pushDefaultPart.containsKey(e)) { localData.pushDefaultPart.remove(e); } defaultPushByte = null; @@ -862,7 +862,7 @@ public class AVM2Graph extends Graph { for (int ip = outSideExceptionNonEmptyPart.start; ip <= outSideExceptionNonEmptyPart.end; ip++) { AVM2Instruction ins = avm2code.code.get(outSideExceptionNonEmptyPart.start); if (ins.definition instanceof PushByteIns) { - + } else if (ins.definition instanceof JumpIns) { } else if (ins.definition instanceof NopIns) { @@ -1054,7 +1054,7 @@ public class AVM2Graph extends Graph { if (afterPart == null) { afterPart = searchFirstPartOutSideTryCatch(localData, finallyException, loops, allParts); } - + if (afterPart != null) { tryStopPart.add(afterPart); } @@ -1066,11 +1066,11 @@ public class AVM2Graph extends Graph { afterPart = null; } } - - if (afterPart == null && localData.pushDefaultPart.containsKey(finallyIndex)){ + + if (afterPart == null && localData.pushDefaultPart.containsKey(finallyIndex)) { exAfterPart = localData.pushDefaultPart.get(finallyIndex); tryStopPart.add(exAfterPart); - } + } tryCommands = printGraph(foundGotos, partCodes, partCodePos, visited, localData, stack, allParts, null, part, tryStopPart, loops, throwStates, staticOperation, path); makeAllCommands(tryCommands, stack); @@ -1191,9 +1191,6 @@ public class AVM2Graph extends Graph { processIfs(cc); } - - - List> blocksToCheck = new ArrayList<>(); blocksToCheck.add(tryItem.tryCommands); blocksToCheck.addAll(tryItem.catchCommands); @@ -1808,15 +1805,31 @@ public class AVM2Graph extends Graph { @Override protected void finalProcessAfter(List list, int level, FinalProcessLocalData localData, String path) { super.finalProcessAfter(list, level, localData, path); - /*for (int i = 0; i < list.size(); i++) { - if (list.get(i) instanceof SetLocalAVM2Item) { - SetLocalAVM2Item ri = (SetLocalAVM2Item) list.get(i); - if (localData.temporaryRegisters.contains(ri.regIndex)) { - list.remove(i); - i--; + for (int i = 0; i < list.size(); i++) { + if (list.get(i) instanceof SetTypeAVM2Item) { + if (((SetTypeAVM2Item) list.get(i)).getValue().getThroughDuplicate() instanceof ExceptionAVM2Item) { + + boolean doRemove = false; + if (list.get(i) instanceof SetSlotAVM2Item) { + doRemove = true; + } + if (list.get(i) instanceof SetLocalAVM2Item) { + int setLocalIp = avm2code.adr2pos(list.get(i).getSrc().getAddress()); + Set usages = localData.getRegisterUsage(setLocalIp); + //Note: There's a hack in PushScopeIns to bypass usage of register to puscope for restoring scopestack + //for example in catch in catch + if (usages.isEmpty()) { + doRemove = true; + } + } + if (doRemove) { + list.remove(i); + i--; + continue; + } } } - }*/ + } } private boolean isIntegerOrPopInteger(GraphTargetItem item) { @@ -1938,27 +1951,6 @@ public class AVM2Graph extends Graph { List ret = list; for (int i = 0; i < list.size(); i++) { - if (list.get(i) instanceof SetTypeAVM2Item) { - if (((SetTypeAVM2Item) list.get(i)).getValue().getThroughDuplicate() instanceof ExceptionAVM2Item) { - - boolean doRemove = false; - if (list.get(i) instanceof SetSlotAVM2Item) { - doRemove = true; - } - if (list.get(i) instanceof SetLocalAVM2Item) { - int setLocalIp = avm2code.adr2pos(list.get(i).getSrc().getAddress()); - Set usages = localData.getRegisterUsage(setLocalIp); - if (usages.isEmpty()) { - doRemove = true; - } - } - if (doRemove) { - list.remove(i); - i--; - continue; - } - } - } if (list.get(i) instanceof IfItem) { IfItem ifi = (IfItem) list.get(i); if (((ifi.expression instanceof HasNextAVM2Item) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/stack/PushScopeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/stack/PushScopeIns.java index 666da55f8..e5d42eb40 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/stack/PushScopeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/stack/PushScopeIns.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.instructions.stack; import com.jpexs.decompiler.flash.abc.ABC; @@ -21,6 +22,7 @@ import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import java.util.List; @@ -48,7 +50,22 @@ public class PushScopeIns extends InstructionDefinition { @Override public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { - localData.scopeStack.push(stack.pop()); + GraphTargetItem top = stack.pop(); + + //Hack for catch inside catch to not detect pushscope register as used + if (top instanceof LocalRegAVM2Item) { + LocalRegAVM2Item getLocal = (LocalRegAVM2Item)top;; + if(getLocal.getSrc() != null){ + int getLocalIp = localData.code.adr2pos(getLocal.getSrc().getAddress()); + for(int setLocalPos : localData.setLocalPosToGetLocalPos.keySet()){ + if (localData.setLocalPosToGetLocalPos.get(setLocalPos).contains(getLocalIp)){ + localData.setLocalPosToGetLocalPos.get(setLocalPos).remove(getLocalIp); + } + } + } + + } + localData.scopeStack.push(top); } @Override diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.air.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.air.swf index 6d0bdbefd5cb38fc67ad186324927f13d21dedb3..6a755b405241802e2440a1404221bf67592afa91 100644 GIT binary patch literal 4221 zcmV-@5Q6VRS5qqhDF6U?0o7VdY#T{>uIeJ$q$HBfH}z{hM5 zTWDS>?CtGTiUrg;c`)86*NUG$DeP}ZV&dN_@(OsL5D?6pj$*FT^^Vyl?q-pvjdhm$t;8Q*YPQ60rg*R{B z_#{GZ-5$R)x4L@&_Fa{z(y!Ph@{91yC?OCTva8j%wGxrY1biSrp^lq{N|ktS*7hsf z{7z-h%dMFxRT_Icg{QIg_3hevv$kH+wkp*MB400SJ9})e)?m4F*#T?4*sRsx+BBWZ zJ({0gQ|q<8&Dz1*oqBD%Uf8Ye7pj%D>xKQo>cZOMqN)|wb}E~VdU0)QtE3gz;lo-} zYcxxRW?`++m|8E^YmLUb>BcqKc<~~Fo+vbW?!mr$^{4ZNX0hzVFEv6(r&hLBs<15C z=Bg`O_D$9MWr$DMzKPG}Pnw)MY4Yqzljm%TZ`5jgk)uj*;#yrReA;((cHy9?@w|S& zQP|de=F(!NTG-innzDaXD|M~dysI@I*Q+a4b5GE|2etISJ=NNNZ0+Xbon~ckN8>KF z;F@o~RpYaksphPqUbd?^hRL$f_LW-@FRgS;zwt$5DIY)Sr61HPCBM1A@j!%Kw>Lil zPxu%1q1IK%T}%kA-eV-QhO-SX&O=TcTLUZArdBUNG45-|Ow_hMUjy2yRJFQmb+2A& zYOMaa%5u3W;lk7>-$+h3F?%l_wF?s5*#wAM*QN#(q$QeQXr+pS8-^lJ`ob2N;asTK zYjvtQ_Q5xR@046N}jWo-ydZAjX?XpU>3FL5r<+A4*9Rkv-B|y_{x@!kA zUo`xc6AG72G0$@O>8Ia3EHl*+SgY31RTWP}6k%cE!OA_?YO`LcZXa|QszC}z0t|(a?{2&A zsGM^HRxoAm2828Jt#2MFXCm{w0f;Um2N`$`>hb(;hX4Q-g7O}V9gr#ltq+zUX!-g# zkH^e^Bg+7kxT!UtXj&DLEWgt+^`ICM;M{)46dLy88O2qf&vuS#4Ath*3EHtV_#u&> z)x1aK+Lnu-8oXZkhTM@2AX^)9M~W+Jd?)K(xV^|v8|!SvlcynQIbi&J$Lh>z*^J=k zJ8;IB$!s=2T<_F{@6wKC)rpNB!e}(>?BL+QsbLscxsq@~-&6clC_jdHOu-2}-Kkap z4>~|ZKk@M7S_kT3TD8;xrZK43NQpc^2yg(2N)@^{v0RKa8F5G^% z!w}8_1P1`f3!8OMtM)q#;v9hRz^!i+?%=bD4zvqA6YLi#fDqywrLSk>lnkB-bBB@rS=) zz+XCJjMjfgk9|JAe*E+4WBZSPKED6>=l}2fkK6NWK8KvtCAz801LGNZ6nM_Va|xcy z@XW)r49^Gfd<0Js9u1y4JWY7^;rVTNz5~yn(>N6<5eVy}#6=Tx#6blo$XzJAsiOyE zAId${82~wmvP8uQ$WfHT)Ex!659K%&9Uu>)JU~6YASY2y(5^7ZBPge-#|Lr-<Kbw3U+UBW@s z130+#APycqghQ7e#-Uq};LxK-aq#Lf9DI5l2fyBngQWN25YYQ^28Egr>q#7X^%P(Q2NU~0g;Wr zGKJj^2P482Fl>C|R7vkqCgsSnpXJA&svO zb#J=sOWhkBAVd$O>8lsZx?l2}Ac_u-Le}GHVVNdI&wyHwrMAnaRu)2=N$3&K*8OXGDKV5A|@mEAk(2-rz!9xrWn$ zmXBVwd?dGhlrVhMe|r_cdM&U%8`y3;SSFWy0Ib9SEYCXiHC+II^dMfZ^tlPl&!d$l zFA+?T2TV$to@zsh8c<-HQY5MX|?@K#>ruPLQx`+BeT71^vK9H3~v^)&~fmbG! zCHVAJqu&i#)kVk)hO6A7PzYhxLt?3oOb!ZG<{HcH&b*h8z$cX;|}#xX(wMwDmODlCtpe{w+wG|Lzct8 zW%vl$bg>tFZN%`&sB(K*=$%_grh3i^GM9@5tm$!f=31%kpB-MH|}$X=shDmNxjMgPK7f4cb8U+d+wP*#V#uKwNAaKs`ilClKaUo{2Qmu0Vq@aeGu* zL!@B|{zdY6_672)Noly+r#ymHnKP@*0SZ%B=aXXwy`HjACT%E(>?qxGxff8TnTrVj zgmtz4f3K_ihI=E*2KRR~&Hhf0@aK&i` zC)_4@VzV7ElkyE_X>sOTM;vT3IP+zi^3;nN%+X@RuQ((28nFuW4<%E9=}Q1`%mSFP z0UWgh?2^kq0H`3%{{&-IdaLjeviB&>OFX?>JP7o~i!^723Qwe#LG2VYQ~$^zU{IlK z1;HdWIA~umvyz4kvy#_u0kvZhL(gZP@Dnz(&e+ZBmdkN4E6Y4Y_;&%!+Oo{@!Vz!r z8L(KI6dh<_*krN@GFc=D81xu0nG-B4I;88s?u&1;`+%~I#e(mUM$M8dw#h%Clv~T- zB!m48b!pCZn+_Y$CcES4>V)#CwJLI@ zqRFp$PLy_j6>a=_R@p(7#@F2DNj0tP!X%u)7#=7Pq-8hTG!CR$r3#DsMJNw(NL@~j z4XN9iv7yiC_aI9B|3H61lV@P~SDHD~|6laKVKV-6;qL{AW6p|W-WJD6dmMY@atz{l z7V8HIuVEx3c1gNVx@9&YM&F@_Bp_q6U7E%nA?fv-H@YN^a35OzqwE%>FrT4jM~O3l z3Euc~Y$PJnmollyG^8BdF3fB@Z$mj{N9mQzEH?bf;KoD z`4t2>&74CaHWzF*|to=uej-e`&PR!^-c%{E~1=UCyLVsShFi zbCyBZYzAGm8zjl)ZZJqi4*fA2^m||sTqw{AGzFFVd1nu~xMdm=Hc2#+c7^Vum*Z&> z1>D@Pe9jRDrSoRy8Z0WinQ5wZv>)oJv^y*kf=iIpI5;5or?E4JZZ-A=CUok?olGiq zV-qY|uq;}%Su}6AC?J}8eN6Gr!bpfz0U&mFA%f= zF+zx208a+o)$81zCZ_?^LIgSnt}f-nL^6%jGV>dJk{n$Y6g$(IqEzmT)D0>ni>u zfU>1Lvz%u#m>*ja_&LUO)dx29t9JDfx$Fh?4;ZNb3@hlzT))+I@Cq`z4(Zxk0K&?j z^1xvZz^xJBS-g%m#Fam5t=j08Zg_3mKh(}%(!ni zBPy4JV8$8}!Ix;pUl<{`F3mqOBYeW88ShYV8x95gkP9Mdr+FKW^4l=)uSTH>dHZTT z(C%%yd9Tc4yLE9kk8L;_UoZ)>2c2^K{=CguV)cG9mD+29xsNP!Ken0s&~9!_E=ypp TCj=oT{Qs1D2Za9tle$sV_$3Yd literal 4120 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 F7Bk)|{F49x literal 5642 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 k1pcJ|p8Nv_N)n;to2;$X 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 R7|;I9(x>6W{{yJaAjq&J8NUDk literal 5609 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