Flash Tutorials - Herong's Tutorial Examples - v3.03, by Dr. Herong Yang
Dumping SWF Files Generated from ActionScript 3 Classes
This section provides a tutorial example on how to dump and disassemble SWF files generated from ActionScript 3 classes. '-D' and '-asm' options should be used.
In this example, let's dump and disassemble a SWF file generated from a Flash application written as an ActionScript 3 class, MyMovieClip.swf. See previous chapter on how MyMovieClip.swf was created.
First dump it with the SWFTools SWF dumper using "-D" option:
C:\herong>\local\swftools\swfdump -D MyMovieClip.swf
[HEADER] File version: 9
[HEADER] File is zlib compressed. Ratio: 71%
[HEADER] File size: 683
[HEADER] Frame rate: 25.000000
[HEADER] Frame count: 1
[HEADER] Movie width: 150.00
[HEADER] Movie height: 150.00
[045] 4 FILEATTRIBUTES as3
[052] 614 DOABC
sealed class <q>[public]com.herongyang::MyMovieClip
extends <q>[public]flash.display::MovieClip{
staticconstructor * =()(0 params, 0 optional)
[stack:0 locals:1 scope:8-8 flags:]
{
00000) + 0:0 returnvoid
}
constructor * <q>[public]com.herongyang::MyMovieClip=()
(0 params, 0 optional)
[stack:1 locals:1 scope:8-8 flags:]
{
00000) + 0:0 getlocal_0
00001) + 1:0 constructsuper 0 params
00002) + 0:0 getlocal_0
00003) + 1:0 callpropvoid <q>[private]::addCircle, 0 params
00004) + 0:0 getlocal_0
00005) + 1:0 callpropvoid <q>[private]::addText, 0 params
00006) + 0:0 returnvoid
}
slot 0: var <q>[private]::green:<q>[public]::uint = 65280
slot 0: var <q>[private]::black:<q>[public]::uint = 0
method <q>[public]::void <q>[private]::addCircle=()
(0 params, 0 optional)
[stack:4 locals:1 scope:8-8 flags:] slot:3
{
00000) + 0:0 getlocal_0
00001) + 1:0 getproperty <q>[public]::graphics
00002) + 1:0 getlocal_0
00003) + 2:0 getproperty <q>[private]::green
...
00020) + 0:0 returnvoid
}
...
}
initmethod * init=()(0 params, 0 optional)
[stack:3 locals:1 scope:0-8 flags:]
{
00000) + 0:0 getlocal_0
00001) + 1:0 pushscope
00002) + 0:1 getglobalscope
00003) + 1:1 getlex <q>[public]::Object
00004) + 2:1 pushscope
00005) + 1:2 getlex <q>[public]flash.events::EventDispatcher
00006) + 2:2 pushscope
00007) + 1:3 getlex <q>[public]flash.display::DisplayObject
00008) + 2:3 pushscope
00009) + 1:4 getlex <q>[public]flash.display::InteractiveObject
...
00027) + 0:1 returnvoid
}
slot 1: class <q>[public]com.herongyang::MyMovieClip=MyMovieClip
[04c] 31 SYMBOLCLASS
exports 0000 as "com.herongyang.MyMovieClip"
[001] 0 SHOWFRAME 1 (00:00:00,000)
[000] 0 END
Then disassemble it with the Flex SWF disassembler using "-asm" option:
C:\herong>\local\flex\bin\swfdump -asm MyMovieClip.swf
<!-- Parsing swf file:/C:/herong/MyMovieClip.swf -->
<!-- ?xml version="1.0" encoding="UTF-8"? -->
<swf xmlns='http://macromedia/2003/swfx' version='9' framerate='25'
size='3000x3000' compressed='true' >
<!-- framecount=1 length=683 -->
<FileAttributes hasMetadata='false' actionScript3='true'
suppressCrossDomainCaching='false' swfRelativeUrls='false'
useNetwork='false'/>
<DoABC2 name=''>
<ProgramNode>
<pkgdefs>
</pkgdefs>
<statements>
<StatementListNode>
<items>
<BinaryProgramNode>
<StatementListNode>
<items>
</items>
</StatementListNode>
<BinaryClassDefNode name="MyMovieClip">
<attrs>
<AttributeListNode public='true'>
</AttributeListNode>
</attrs>
<name>
<QualifiedIdentifierNode name="MyMovieClip">
<AttributeListNode public='true'>
</AttributeListNode>
</QualifiedIdentifierNode>
</name>
<baseclass>
<LiteralStringNode value="flash.display:MovieClip"/>
</baseclass>
<instanceinits>
<VariableDefinitionNode>
<attrs>
<AttributeListNode private='true'>
</AttributeListNode>
</attrs>
<list>
...
</list>
</VariableDefinitionNode>
...
<BinaryFunctionDefinitionNode>
<name>
<FunctionNameNode kind="-133">
<QualifiedIdentifierNode name="addCircle">
<AttributeListNode private='true'>
</AttributeListNode>
</QualifiedIdentifierNode>
</FunctionNameNode>
</name>
<attrs>
<AttributeListNode private='true'>
</AttributeListNode>
</attrs>
<fexpr>
<FunctionCommonNode>
...
</FunctionCommonNode>
</fexpr>
</BinaryFunctionDefinitionNode>
...
</instanceinits>
<statements>
<StatementListNode>
<items>
</items>
</StatementListNode>
</statements>
</BinaryClassDefNode>
</BinaryProgramNode>
</items>
</StatementListNode>
</statements>
</ProgramNode>
</DoABC2>
<SymbolClass>
<Symbol idref='0' className='com.herongyang.MyMovieClip' />
</SymbolClass>
<ShowFrame/>
</swf>
Conclusion:
Table of Contents
Adobe Flash Player Plugin for Firefox
Adobe Flash Player Plugin for Chrome
Adobe Flash Player Plugin for Safari
Adobe Flash Player ActiveX for IE
Using "object" Elements for Flash Files
Using "embed" Elements for Flash Files
"mp3player" - MP3 Music Player
SWFObject - Hidding "object" behind JavaScript
SWFTools - SWF File Manipulation Tools
SWFC Script to Generate Flash SWF Files
ActionScript Embedded in SWFC Script
AS3Compile - ActionScript 3 Compiler
Downloading and Installing Flex SDK 4.1
MXML Example Using Spark Components
Compiling ActionScript 3 Scripts with 'mxmlc'
Dumping SWF Files Containing ActionScript 3 Statements
►Dumping SWF Files Generated from ActionScript 3 Classes
Dumping SWF Files Generated from MXML Applications