-- ABC/SWF byte code -- -- Assumption: each branching target is preceded by a Location -- SET AllSwf = SwfFile Rect Tags Tag TagKind AbcFlags AbcFlag AllAbcFile SET OnlySwfAbc = SwfFile Tags Tag AbcFile SET AllAbcFile = AbcFile AllAbc SET AllAbc = MethodInfos MetaInfos InstanceInfos ClassInfos ScriptInfos BodyInfos PoolInfo PoolInts PoolUInts PoolDoubles PoolStrings NamespaceInfos SetInfos MultinameInfos NamespaceInfo NamespaceKind SetInfo NamespaceNames MultinameInfo MultinameKind MethodInfo ParamTypes MethodFlags MethodFlag Optionals Optional ValueKind ParamNames MetaInfo MetaItems MetaItem InstanceInfo InstanceFlags InstanceFlag Interfaces AllTraits ClassInfo ScriptInfo BodyInfo Instructions Instruction DebugType CaseOffsets Exceptions Exception SET AllTraits = Traits Trait TraitKind TraitData TraitAttrs TraitAttr TraitMeta ValueKind DATA SwfFile | File compressed : Bool version : Word8 length : Word32 size : Rect rate : Word16 count : Word16 tags : Tags DATA Rect | Rect bits : Int xMin : Word32 xMax : Word32 yMin : Word32 yMax : Word32 TYPE Tags = [Tag] DATA Tag | Abc flags : AbcFlags name : ByteString file : AbcFile | FileAttributes useDirectBlit : Bool useGPU : Bool hasMetaData : Bool hasAS3 : Bool useNetwork : Bool | Opaque kind : TagKind length : Word32 body : ByteString | End TYPE AbcFlags = [AbcFlag] DATA AbcFlag | LazyInit DATA TagKind | End | ShowFrame | DefineShape | PlaceObject | RemoveObject | DefineBits | DefineButton | JPEGTables | SetBackgroundColor | DefineFont | DefineText | DoAction | DefineFontInfo | DefineSound | StartSound | DefineButtonSound | SoundStreamHead | SoundStreamBlock | DefineBitsLossless | DefineBitsJPEG2 | DefineShape2 | DefineButtonCxform | Protect | PlaceObject2 | RemoveObject2 | DefineShape3 | DefineText2 | DefineButton2 | DefineBitsJPEG3 | DefineBitsLossless2 | DefineEditText | DefineSprite | FrameLabel | SoundStreamHead2 | DefineMorphShape | DefineFont2 | ExportAssets | ImportAssets | EnableDebugger | DoInitAction | DefineVideoStream | VideoFrame | DefineFontInfo2 | EnableDebugger2 | ScriptLimits | SetTabIndex | FileAttributes | PlaceObject3 | ImportAssets2 | DefineFontAlignZones | CSMTextSettings | DefineFont3 | SymbolClass | Metadata | DefineScalingGrid | DoABC | DefineShape4 | DefineMorphShape2 | DefineSceneAndFrameLabelData | DefineBinaryData | DefineFontName | StartSound2 | DefineBitsJPEG4 | DefineFont4 | Other code : Word16 DATA AbcFile | File minorVersion : Word16 majorVersion : Word16 constantPool : PoolInfo methods : MethodInfos metadatas : MetaInfos instances : InstanceInfos classes : ClassInfos scripts : ScriptInfos bodies : BodyInfos TYPE MethodInfos = [MethodInfo] TYPE MetaInfos = [MetaInfo] TYPE InstanceInfos = [InstanceInfo] TYPE ClassInfos = [ClassInfo] TYPE ScriptInfos = [ScriptInfo] TYPE BodyInfos = [BodyInfo] DATA PoolInfo | Info integers : PoolInts uintegers : PoolUInts doubles : PoolDoubles strings : PoolStrings namespaces : NamespaceInfos namesets : SetInfos multinames : MultinameInfos TYPE PoolInts = [Word32] TYPE PoolUInts = [Word32] TYPE PoolDoubles = [Double] TYPE PoolStrings = [ByteString] TYPE NamespaceInfos = [NamespaceInfo] TYPE SetInfos = [SetInfo] TYPE MultinameInfos = [MultinameInfo] DATA NamespaceInfo | Info kind : NamespaceKind name : Word32 DATA NamespaceKind | General | Package | Internal | Protected | Explicit | Static | Private DATA SetInfo | Info names : NamespaceNames TYPE NamespaceNames = [Word32] DATA MultinameInfo | QName namespace : Word32 name : Word32 | QNameA namespace : Word32 name : Word32 | RTQName name : Word32 | RTQNameA name : Word32 | RTQNameL | RTQNameLA | Multiname name : Word32 set : Word32 | MultinameA name : Word32 set : Word32 | MultinameL set : Word32 | MultinameLA set : Word32 | Generic name : Word32 params : ParamNames DATA MultinameKind | QName | QNameA | RTQName | RTQNameA | RTQNameL | RTQNameLA | Multiname | MultinameA | MultinameL | MultinameLA | Generic DATA MethodInfo | Info return : Word32 params : ParamTypes name : Word32 flags : MethodFlags options : Optionals names : ParamNames TYPE ParamTypes = [Word32] TYPE MethodFlags = [MethodFlag] DATA MethodFlag | NeedArgs | NeedAct | NeedRest | HasOptionals | SetDXNS | HasParamNames TYPE Optionals = [Optional] DATA Optional | Detail val : Word32 kind : ValueKind DATA ValueKind | Int | UInt | Double | Utf8 | True | False | Null | Undefined | Namespace | Package | Internal | Protected | Explicit | Static | Private TYPE ParamNames = [Word32] DATA MetaInfo | Info name : Word32 items : MetaItems TYPE MetaItems = [MetaItem] DATA MetaItem | Item key : Word32 value : Word32 DATA InstanceInfo | Info name : Word32 super : Word32 flags : InstanceFlags protectedNs : Word32 interfaces : Interfaces constructor : Word32 traits : Traits TYPE InstanceFlags = [InstanceFlag] DATA InstanceFlag | ClassSealed | ClassFinal | ClassInterface | ClassProtected TYPE Interfaces = [Word32] TYPE Traits = [Trait] DATA Trait | Trait name : Word32 data : TraitData attrs : TraitAttrs meta : TraitMeta DATA TraitKind | Slot | Method | Getter | Setter | Class | Function | Const DATA TraitData | Slot slotId : Word32 tp : Word32 vindex : Word32 vkind : ValueKind | Const slotId : Word32 tp : Word32 vindex : Word32 vkind : ValueKind | Method dispId : Word32 method : Word32 | Getter dispId : Word32 method : Word32 | Setter dispId : Word32 method : Word32 | Function dispId : Word32 method : Word32 | Class slotId : Word32 class : Word32 TYPE TraitAttrs = [TraitAttr] DATA TraitAttr | Final | Override | Metadata TYPE TraitMeta = [Word32] DATA ClassInfo | Info con : Word32 traits : Traits DATA ScriptInfo | Info method : Word32 traits : Traits DATA BodyInfo | Info method : Word32 maxStack : Word32 localCount : Word32 initScopeDepth : Word32 maxScopeDepth : Word32 instructions : Instructions exceptions : Exceptions traits : Traits TYPE Instructions = [Instruction] DATA Instruction | Add | Add_i | Add_d | ApplyType name : Word32 | AsType name : Word32 | AsTypeLate | Breakpoint | BreakLine line : Word32 | BitAnd | BitNot | BitOr | BitXor | Call argCount : Word32 | CallInterface name : Word32 argCount : Word32 | CallMethod index : Word32 argCount : Word32 | CallProp name : Word32 argCount : Word32 | CallPropLex name : Word32 argCount : Word32 | CallPropVoid name : Word32 argCount : Word32 | CallStatic method : Word32 argCount : Word32 | CallSuper name : Word32 argCount : Word32 | CallSuperId | CallSuperVoid name : Word32 argCount : Word32 | CheckFilter | Coerce name : Word32 | Coerce_a | Coerce_b | Coerce_d | Coerce_i | Coerce_o | Coerce_s | Coerce_u | Concat | Construct argCount : Word32 | ConstructProp name : Word32 argCount : Word32 | ConstructSuper argCount : Word32 | Convert_b | Convert_i | Convert_d | Convert_o | Convert_u | Convert_s | Debug tp : DebugType name : Word32 reg : Word32 extra : Word32 | DebugFile name : Word32 | DebugLine line : Word32 | DecLocal reg : Word32 | DecLocal_i reg : Word32 | Decrement | Decrement_i | DeleteProperty name : Word32 | DeletePropertyLate | Divide | Dup | Dxns name : Word32 | DxnsLate | Equals | EscXAttr | EscXElem | FindDef name : Word32 | FindPropertyGlobalStrict name : Word32 | FindPropertyGlobal name : Word32 | FindProperty name : Word32 | FindPropStrict name : Word32 | GetDescendants name : Word32 | GetGlobalScope | GetGlobalSlot slot : Word32 | GetLex name : Word32 | GetLocal reg : Word32 | GetLocal0 | GetLocal1 | GetLocal2 | GetLocal3 | GetOuterScope name : Word32 | GetProperty name : Word32 | GetScopeObject index : Word8 | GetSlot slot : Word32 | GetSuper name : Word32 | GreaterEquals | GreaterThan | HasNext | HasNext2 objectReg : Word32 indexReg : Word32 | IfEq offset : Word32 -- note: S24 is offset with respect to the next instruction! | IfFalse offset : Word32 | IfGe offset : Word32 | IfGt offset : Word32 | IfLe offset : Word32 | IfLt offset : Word32 | IfNGe offset : Word32 | IfNGt offset : Word32 | IfNLe offset : Word32 | IfNLt offset : Word32 | IfNe offset : Word32 | IfStrictEq offset : Word32 | IfStrictNe offset : Word32 | IfTrue offset : Word32 | In | IncLocal reg : Word32 | IncLocal_i reg : Word32 | Increment | Increment_i | InitProperty name : Word32 | InstanceOf | IsType name : Word32 | IsTypeLate | Jump offset : Word32 | Kill reg : Word32 | Label | LessEquals | LessThan | LoadFloat32 | LoadFloat64 | LoadIndirect8 | LoadIndirect16 | LoadIndirect32 | LookupSwitch defaultOffset : Word32 caseOffsets : CaseOffsets -- offset with respect of start of this instruction! | Lshift | Modulo | Multiply | Multiply_i | Negate | Negate_i | NewActivation | NewArray argCount : Word32 | NewCatch exception : Word32 | NewClass class : Word32 | NewFunction method : Word32 | NewObject argCount : Word32 | NextName | NextValue | Nop | Not | Pop | PopScope | PushByte val : Word8 | PushDouble name : Word32 | PushFalse | PushInt name : Word32 | PushNamespace name : Word32 | PushNaN | PushNull | PushScope | PushShort val : Word32 | PushString name : Word32 | PushTrue | PushUInt name : Word32 | PushUndefined | PushWith | ReturnValue | ReturnVoid | Rshift | SetLocal reg : Word32 | SetLocal0 | SetLocal1 | SetLocal2 | SetLocal3 | SetGlobalSlot slot : Word32 | SetProperty name : Word32 | SetPropertyLate | SetSlot slot : Word32 | SetSuper name : Word32 | SignExtend1 | SignExtend8 | SignExtend16 | StoreFloat32 | StoreFloat64 | StoreIndirect32 | StoreIndirect16 | StoreIndirect8 | StrictEquals | Substract | Substract_i | Swap | Throw | Timestamp | TypeOf | Urshift DATA Instruction -- special instruction that represents location information | Location index : Int -- offset since start of the byte codes DATA DebugType | Local TYPE CaseOffsets = [Word32] TYPE Exceptions = [Exception] DATA Exception | Info from : Word32 to : Word32 target : Word32 tp : Word32 name : Word32