resolve as2 constants button

This commit is contained in:
2015-05-02 22:09:28 +02:00
parent 913b3f22e3
commit 0702259c88
15 changed files with 43 additions and 21 deletions
@@ -17,7 +17,6 @@
package com.jpexs.decompiler.flash;
import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.action.model.ConstantPool;
import com.jpexs.decompiler.flash.action.special.ActionEnd;
import com.jpexs.decompiler.flash.action.special.ActionNop;
import com.jpexs.decompiler.flash.action.swf3.ActionGetURL;
@@ -1565,11 +1564,10 @@ public class SWFInputStream implements AutoCloseable {
/**
* Reads one Action from the stream
*
* @param cpool
* @return Action or null when ActionEndFlag or end of the stream
* @throws IOException
*/
public Action readAction(ConstantPool cpool) throws IOException {
public Action readAction() throws IOException {
int actionCode = -1;
try {
@@ -1603,7 +1601,7 @@ public class SWFInputStream implements AutoCloseable {
case 0x09:
return new ActionStopSounds();
case 0x8A:
return new ActionWaitForFrame(actionLength, this, cpool);
return new ActionWaitForFrame(actionLength, this);
case 0x8B:
return new ActionSetTarget(actionLength, this, swf.version);
case 0x8C:
@@ -1684,7 +1682,7 @@ public class SWFInputStream implements AutoCloseable {
case 0x28:
return new ActionEndDrag();
case 0x8D:
return new ActionWaitForFrame2(actionLength, this, cpool);
return new ActionWaitForFrame2(actionLength, this);
case 0x26:
return new ActionTrace();
case 0x34:
@@ -131,13 +131,11 @@ public class ActionListReader {
* @throws java.lang.InterruptedException
*/
public static ActionList readActionList(List<DisassemblyListener> listeners, SWFInputStream sis, int version, int ip, int endIp, String path, int deobfuscationMode) throws IOException, InterruptedException {
ConstantPool cpool = new ConstantPool();
// Map of the actions. Use TreeMap to sort the keys in ascending order
// actionMap and nextOffsets should contain exaclty the same keys
Map<Long, Action> actionMap = new TreeMap<>();
Map<Long, Long> nextOffsets = new HashMap<>();
Action entryAction = readActionListAtPos(listeners, cpool,
Action entryAction = readActionListAtPos(listeners, null,
sis, actionMap, nextOffsets,
ip, 0, endIp, path, false, new ArrayList<Long>());
@@ -238,12 +236,10 @@ public class ActionListReader {
}
public static List<Action> getOriginalActions(SWFInputStream sis, int startIp, int endIp) throws IOException, InterruptedException {
ConstantPool cpool = new ConstantPool();
// Map of the actions. Use TreeMap to sort the keys in ascending order
Map<Long, Action> actionMap = new TreeMap<>();
Map<Long, Long> nextOffsets = new HashMap<>();
readActionListAtPos(new ArrayList<DisassemblyListener>(), cpool,
readActionListAtPos(new ArrayList<DisassemblyListener>(), null,
sis, actionMap, nextOffsets,
startIp, startIp, endIp + 1, "", false, new ArrayList<Long>());
@@ -690,7 +686,7 @@ public class ActionListReader {
sis.seek((int) ip);
Action a;
if ((a = sis.readAction(cpool)) == null) {
if ((a = sis.readAction()) == null) {
break;
}
@@ -729,10 +725,7 @@ public class ActionListReader {
if (a instanceof ActionPush && cpool != null) {
((ActionPush) a).constantPool = cpool.constants;
} else if (a instanceof ActionConstantPool) {
if (cpool == null) {
cpool = new ConstantPool();
}
cpool.setNew(((ActionConstantPool) a).constantPool);
cpool = new ConstantPool(((ActionConstantPool) a).constantPool);
} else if (a instanceof ActionIf) {
ActionIf aIf = (ActionIf) a;
long nIp = ip + actionLengthWithHeader + aIf.getJumpOffset();
@@ -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.action.parser.pcode;
import com.jpexs.decompiler.flash.action.Action;
@@ -22,7 +22,6 @@ import com.jpexs.decompiler.flash.SWFOutputStream;
import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.action.ActionGraph;
import com.jpexs.decompiler.flash.action.ActionList;
import com.jpexs.decompiler.flash.action.model.ConstantPool;
import com.jpexs.decompiler.flash.action.model.DirectValueActionItem;
import com.jpexs.decompiler.flash.action.model.clauses.IfFrameLoadedActionItem;
import com.jpexs.decompiler.flash.action.parser.ActionParseException;
@@ -46,7 +45,7 @@ public class ActionWaitForFrame extends Action implements ActionStore {
public List<Action> skipped;
public ActionWaitForFrame(int actionLength, SWFInputStream sis, ConstantPool cpool) throws IOException {
public ActionWaitForFrame(int actionLength, SWFInputStream sis) throws IOException {
super(0x8A, actionLength);
frame = sis.readUI16("frame");
skipCount = sis.readUI8("skipCount");
@@ -22,7 +22,6 @@ import com.jpexs.decompiler.flash.SWFOutputStream;
import com.jpexs.decompiler.flash.action.Action;
import com.jpexs.decompiler.flash.action.ActionGraph;
import com.jpexs.decompiler.flash.action.ActionList;
import com.jpexs.decompiler.flash.action.model.ConstantPool;
import com.jpexs.decompiler.flash.action.model.clauses.IfFrameLoadedActionItem;
import com.jpexs.decompiler.flash.action.parser.ActionParseException;
import com.jpexs.decompiler.flash.action.parser.pcode.FlasmLexer;
@@ -60,7 +59,7 @@ public class ActionWaitForFrame2 extends Action implements ActionStore {
skipCount = store.size();
}
public ActionWaitForFrame2(int actionLength, SWFInputStream sis, ConstantPool cpool) throws IOException {
public ActionWaitForFrame2(int actionLength, SWFInputStream sis) throws IOException {
super(0x8D, actionLength);
skipCount = sis.readUI8("skipCount");
skipped = new ArrayList<>();
@@ -46,6 +46,7 @@ public class ConstantIndex implements Serializable {
}
}
}
return "constant" + index;
}
@@ -58,6 +59,7 @@ public class ConstantIndex implements Serializable {
}
}
}
return "constant" + index;
}
}
@@ -196,6 +196,7 @@ public class DefineButtonTag extends ButtonTag implements ASMSource {
if (prevLength != 0) {
rri.seek(prevLength);
}
ActionList list = ActionListReader.readActionListTimeout(listeners, rri, getVersion(), prevLength, prevLength + actionBytes.getLength(), toString()/*FIXME?*/);
return list;
} catch (InterruptedException ex) {
@@ -131,6 +131,7 @@ public class DoActionTag extends Tag implements ASMSource {
if (prevLength != 0) {
rri.seek(prevLength);
}
ActionList list = ActionListReader.readActionListTimeout(listeners, rri, getVersion(), prevLength, prevLength + actionBytes.getLength(), toString()/*FIXME?*/);
return list;
} catch (InterruptedException ex) {
@@ -138,6 +138,7 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource {
if (prevLength != 0) {
rri.seek(prevLength);
}
ActionList list = ActionListReader.readActionListTimeout(listeners, rri, getVersion(), prevLength, prevLength + actionBytes.getLength(), toString()/*FIXME?*/);
return list;
} catch (InterruptedException ex) {
@@ -205,6 +205,7 @@ public class BUTTONCONDACTION implements ASMSource, Serializable {
if (prevLength != 0) {
rri.seek(prevLength);
}
ActionList list = ActionListReader.readActionListTimeout(listeners, rri, swf.version, prevLength, prevLength + actionBytes.getLength(), toString()/*FIXME?*/);
return list;
@@ -199,6 +199,7 @@ public class CLIPACTIONRECORD implements ASMSource, Serializable {
if (prevLength != 0) {
rri.seek(prevLength);
}
ActionList list = ActionListReader.readActionListTimeout(listeners, rri, swf.version, prevLength, prevLength + actionBytes.getLength(), toString()/*FIXME?*/);
return list;
} catch (InterruptedException ex) {