The ActionScript Byte Code assembler / disassembler in PLT Scheme and Gauche
Scheme Erlang ActionScript Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
doc
examples
Makefile
README
abc.k
abcsx-gauche.scm
abcsx.ss
check.scm
instruction.k
note-ja.txt
runasm.sh
swf-gauche.scm
swf-test.k
swf.k
swf_abc.erl
test.scm

README

abcsx - The ActionScript Byte Code assembler / disassembler in Scheme

This is a set of tools to examine Adobe's ABC format file.

* Usage

abcsx.ss filename.sx

Generate ABC binary file from ASM-form or ABC-form (described
below). The output file name is filename.sx.abc.

abcsx.ss -dump [-abc] filename.abc

Desassemble an abc file. The output is printed to stdout. If -abc
option is specified, ABC-form (described below) is chosen.

runasm.sh filename.sx

Assemble ASM-form or ABC-form and execute it by avmshell. It requires
avmshell installed. Avmshell is included in Tamarin VM's source tree.

swf_abc.erl width height classname abcfile.abc

An helper program to generate a flash file from an abc file. It
requires Erlang.

* File Format

There are two kinds of representation to describe a ABC file. You can
use either way depend on the purpose. Asm.ss accepts both format.

ASM-form : A (relatively) human friendly notation

(asm
 (method
  (((signature
     ((return_type *) (param_type ()) (name "hello") (flags 0) (options ()) (param_names ())))
    (code
     ((getlocal 0)
      (pushscope)
      (findpropstrict ((package "") "print"))
      (pushstring "Hello, World!!")
      (callproperty ((package "") "print") 1)
      (returnvoid))))))
 (script (((init (method 0)) (trait ())))))

ABC-form : One-to-One translation to S-expression

(abc
 (minor_version 16)
 (major_version 46)
 (constant_pool
  ((integer ())
   (uinteger ())
   (double ())
   (string ("hello" "" "print" "Hello, World!!"))
   (namespace ((package (string 2))))
   (ns_set ())
   (multiname (((namespace 1) (string 3))))))
 (method
  (((return_type (multiname 0)) (param_type ()) (name (string 1)) (flags 0) (options ()) (param_names ()))))
 (metadata ())
 (instance ())
 (class ())
 (script (((init (method 0)) (trait ()))))
 (method_body
  (((method 0) (max_stack 2) (local_count 1) (init_scope_depth 0) (max_scope_depth 1) (code
     ((getlocal 0)
      (pushscope)
      (findpropstrict (multiname 1))
      (pushstring (string 4))
      (callproperty (multiname 1) 1)
      (returnvoid)))
    (exception ())
    (trait ())))))

* Platforms

PLT-Scheme (mzscheme) 4.2.1
Gauche 0.8.13

* Bugs

Constant slots (vkind) is not supported properly in the ASM-form writer.