From 8032b2e39bc80ffecf804db9c02d104d1920ab79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 14 Feb 2026 11:57:04 +0100 Subject: [PATCH] Debugging in the browser WIP --- lib/flashdebugger.jar | Bin 256072 -> 254996 bytes libsrc/ffdec_lib/lib/flashdebugger.jar | Bin 256072 -> 254996 bytes .../src/com/jpexs/decompiler/flash/SWF.java | 30 ++++- .../decompiler/flash/gui/DebugPanel.java | 2 +- .../decompiler/flash/gui/DebuggerHandler.java | 123 ++++++++++++++---- src/com/jpexs/decompiler/flash/gui/Main.java | 99 ++++++++++++-- .../decompiler/flash/gui/MainFrameMenu.java | 7 + .../flash/gui/graphics/listen16.png | Bin 0 -> 1709 bytes .../flash/gui/graphics/listen32.png | Bin 0 -> 3132 bytes .../flash/gui/locales/MainFrame.properties | 8 +- .../flash/gui/tagtree/TagTreeContextMenu.java | 63 ++++++++- 11 files changed, 292 insertions(+), 40 deletions(-) create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/listen16.png create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/listen32.png diff --git a/lib/flashdebugger.jar b/lib/flashdebugger.jar index 8c405a7cce8c11eb688f1b4248c7fee7e04511d8..9cdb11151a472fae1973bbd3cb8d7e2532ea2395 100644 GIT binary patch delta 14284 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 L_;1~e%{u#kH}j^q delta 14864 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 diff --git a/libsrc/ffdec_lib/lib/flashdebugger.jar b/libsrc/ffdec_lib/lib/flashdebugger.jar index 8c405a7cce8c11eb688f1b4248c7fee7e04511d8..9cdb11151a472fae1973bbd3cb8d7e2532ea2395 100644 GIT binary patch delta 14284 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 L_;1~e%{u#kH}j^q delta 14864 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 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index c963771cc..dd3016a39 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -181,6 +181,7 @@ import com.jpexs.helpers.Helper; import com.jpexs.helpers.ImageResizer; import com.jpexs.helpers.ImmediateFuture; import com.jpexs.helpers.NulStream; +import com.jpexs.helpers.PosMarkedInputStream; import com.jpexs.helpers.ProgressListener; import com.jpexs.helpers.Reference; import com.jpexs.helpers.SerializableImage; @@ -204,6 +205,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; +import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Arrays; @@ -695,6 +697,15 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { * Lock for characters synchronization */ private final Object charactersLock = new Object(); + + /** + * SHA 256 hash of original data + */ + private String hashSha256 = null; + + public String getHashSha256() { + return hashSha256; + } public UninitializedClassFieldsDetector getUninitializedClassFieldsDetector() { return uninitializedClassFieldsDetector; @@ -1818,9 +1829,16 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { * @param includeImported Include imported characters * @throws IOException On I/O error */ - public void saveTo(OutputStream os, boolean gfx, boolean includeImported) throws IOException { + public void saveTo(OutputStream os, boolean gfx, boolean includeImported) throws IOException { checkCharset(); byte[] newUncompressedData = saveToByteArray(gfx, includeImported); + + try { + hashSha256 = Helper.byteArrayToHex(MessageDigest.getInstance("SHA-256").digest(newUncompressedData)); + } catch (NoSuchAlgorithmException ex) { + //ignore + } + ByteArrayOutputStream baos = new ByteArrayOutputStream(); compress(new ByteArrayInputStream(newUncompressedData), baos, compression, lzmaProperties); byte[] newCompressedData = baos.toByteArray(); @@ -1828,7 +1846,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { encrypt(new ByteArrayInputStream(newCompressedData), os); } else { os.write(newCompressedData); - } + } } /** @@ -2298,7 +2316,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { public SWF(InputStream is, String file, String fileTitle, ProgressListener listener, boolean parallelRead, boolean checkOnly, boolean lazy, UrlResolver resolver, String charset, boolean allowRenameIdentifiers) throws IOException, InterruptedException { this.file = file; this.fileTitle = fileTitle; - this.charset = charset; + this.charset = charset; ByteArrayOutputStream baos = new ByteArrayOutputStream(); SWFHeader header = decompress(is, baos, true); gfx = header.gfx; @@ -2307,6 +2325,12 @@ public final class SWF implements SWFContainerItem, Timelined, Openable { lzmaProperties = header.lzmaProperties; uncompressedData = baos.toByteArray(); originalUncompressedData = uncompressedData; + + try { + hashSha256 = Helper.byteArrayToHex(MessageDigest.getInstance("SHA-256").digest(uncompressedData)); + } catch (NoSuchAlgorithmException ex) { + //ignore + } SWFInputStream sis = new SWFInputStream(this, uncompressedData); dumpInfo = new DumpInfoSwfNode(this, "rootswf", "", null, 0, 0); diff --git a/src/com/jpexs/decompiler/flash/gui/DebugPanel.java b/src/com/jpexs/decompiler/flash/gui/DebugPanel.java index d19c5d545..8a484c6f0 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebugPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/DebugPanel.java @@ -495,7 +495,7 @@ public class DebugPanel extends JPanel { SelectedTab oldSel = selectedTab; localsTable = null; - SWF swf = Main.getMainFrame().getPanel().getCurrentSwf(); + SWF swf = Main.getDebuggedSWF(); if (swf == null) { return; } diff --git a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java index 0eb96ba53..fa84f362d 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java +++ b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java @@ -31,7 +31,9 @@ import com.jpexs.debugger.flash.messages.in.InCallFunction; import com.jpexs.debugger.flash.messages.in.InConstantPool; import com.jpexs.debugger.flash.messages.in.InContinue; import com.jpexs.debugger.flash.messages.in.InErrorException; +import com.jpexs.debugger.flash.messages.in.InExit; import com.jpexs.debugger.flash.messages.in.InFrame; +import com.jpexs.debugger.flash.messages.in.InGetSwf; import com.jpexs.debugger.flash.messages.in.InGetVariable; import com.jpexs.debugger.flash.messages.in.InNumScript; import com.jpexs.debugger.flash.messages.in.InPlaceObject; @@ -43,6 +45,7 @@ import com.jpexs.debugger.flash.messages.in.InTrace; import com.jpexs.debugger.flash.messages.in.InVersion; import com.jpexs.debugger.flash.messages.out.OutAddWatch2; import com.jpexs.debugger.flash.messages.out.OutGetBreakReason; +import com.jpexs.debugger.flash.messages.out.OutGetSwf; import com.jpexs.debugger.flash.messages.out.OutPlay; import com.jpexs.debugger.flash.messages.out.OutProcessedTag; import com.jpexs.debugger.flash.messages.out.OutRewind; @@ -51,7 +54,11 @@ import com.jpexs.debugger.flash.messages.out.OutSwfInfo; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.graph.DottedChain; +import com.jpexs.helpers.Helper; +import java.io.FileOutputStream; import java.io.IOException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -72,7 +79,7 @@ import java.util.regex.Pattern; * @author JPEXS */ public class DebuggerHandler implements DebugConnectionListener { - + private boolean connected = false; private DebuggerCommands commands = null; @@ -586,15 +593,13 @@ public class DebuggerHandler implements DebugConnectionListener { } } - public void disconnect() { + + private void disconnected() { frame = null; pool = null; breakInfo = null; breakReason = null; connected = false; - if (commands != null) { - commands.disconnect(); - } commands = null; synchronized (this) { for (SWF debuggedSwf : debuggedSwfs) { @@ -630,6 +635,18 @@ public class DebuggerHandler implements DebugConnectionListener { } debuggedSwfs.clear(); } + + public void disconnect() { + frame = null; + pool = null; + breakInfo = null; + breakReason = null; + connected = false; + if (commands != null) { + commands.disconnect(); + } + disconnected(); + } public synchronized boolean isConnected() { return connected; @@ -659,10 +676,6 @@ public class DebuggerHandler implements DebugConnectionListener { @Override public void connected(DebuggerConnection con) { - /*for (SWF debuggedSwf : debuggedSwfs) { - makeBreakPointsUnconfirmed(debuggedSwf); - }*/ - Main.startWork(AppStrings.translate("work.debugging"), null); synchronized (this) { @@ -701,7 +714,7 @@ public class DebuggerHandler implements DebugConnectionListener { final Pattern patAS3 = Pattern.compile("^(.*);(.*);(.*)\\.as$"); final Pattern patAS3PCode = Pattern.compile("^(?[0-9a-z_]+):#PCODE abc:(?[0-9]+),script:(?