tamarin获取swf文档类

[思路]根据swf_file_format_spec_v10里的说明知道 SymbolClass tag(标签)是swf符号与ActionScript 3.0类相关联的tag。而角色ID(character ID)为0的类为swf文件的主类或称文档类。而我们需要做便是分析SymbolClass tag从中读取出 ID为0的类即可。文档说明中的SymbolClass tag格式:参照http://www.adobe.com/devnet/swf/pdf/swf_file_format_spec_v10.pdf SymbolClass的介绍

NumSymbols   类的个数

Tag2     占2个字节      即character tag ID  

String   存放着我们要找的类名  

获取String的长度:

int GetStringLen()
        {   
            int i=0;
            while (readU8() != 0)
            {
                i++;
            }
            return i;
        }

获取文档类

char * handleSymbolClass(SwfParser &parser, int taglen)
    {
        int        NumSymbols;
        int        *tag;
        char    *ClassName; 
        NumSymbols=parser.readU16();

        tag = new int[NumSymbols]; 
        for(int i=0;i< NumSymbols;i++)
        {
            tag[i]=parser.readU16();

            StringPos=parser.pos;
            StringLen = parser.GetStringLen();
            ClassName = new char[StringLen];
            uint8_t *buffer = parser.swf.getBuffer();
            VMPI_memcpy(ClassName,(void *)(buffer+StringPos),StringLen); 
  
            if (tag[i] == 0)
            { 
                printf("tagid=%d\t",tag[i]); 
                printf("%s \tStringLen=%d\n",ClassName[i],StringLen); 

            }
        } 
    }

Posted: 七月 29th, 2010 under 随便写点 - No Comments.

windows下载编译tamarin

1、运行环境:python2.5,java1.6,VS2008

2、下载tamarin源文件
tamarin的zip压缩包。

3、将tamarin/platform/win32/armasm.rules 拷贝到 c:/Program Files/Microsoft Visual Studio 9.0/VC/VCProjectDefaults , 如果不拷贝可能出现MMgc(unavailabel)的错误。

4、之前的版本支持vs2003和vs2005,最新的版本只支持vs2008,打开tamarin\platform\win32\avmplus2008.sln,如果下载的源码包里头没有avmplus2008.sln这个文件,那就不是到目前为止最新的。

5、用vs2008打开之后可以看到avmplus,eval,MMgc,nanojit,shell,zlib共6个项目,依次build。在avmplus中可能发现ErrorConstants.cpp中有很多编译错误,主要是多语言引起的,将其它语言都用英语代替即可。注释办法:在ErrorConstants.h文件中注释

//#define AVMPLUS_ERROR_LANG_cs
//#define AVMPLUS_ERROR_LANG_de
//#define AVMPLUS_ERROR_LANG_es
//#define AVMPLUS_ERROR_LANG_fr
//#define AVMPLUS_ERROR_LANG_it
//#define AVMPLUS_ERROR_LANG_ja
//#define AVMPLUS_ERROR_LANG_ko
//#define AVMPLUS_ERROR_LANG_nl
//#define AVMPLUS_ERROR_LANG_pl
//#define AVMPLUS_ERROR_LANG_pt
//#define AVMPLUS_ERROR_LANG_ru
//#define AVMPLUS_ERROR_LANG_sv
//#define AVMPLUS_ERROR_LANG_tr
//#define AVMPLUS_ERROR_LANG_zh_CN
//#define AVMPLUS_ERROR_LANG_zh_TW

除此之外还有一个地方需要改…把警告当错误!选中项目,属性——>配置属性——>C/C++ 将警告视为错误选否。不出意外的话…应该能编译OK

6、将asc.jar拷贝到tamarin\utils\目录下,如果安装了Flex,直接到Flex的安装目录下搜索即可在lib下找到该文件,该文件可以编译as文件为abc文件。

7、新建文件hello.as,写入代码print(”hello, world”);,然后用asc.jar将其编译为abc文件,命令为:java -jar ./utils/asc.jar -import ./core/builtin.abc hello.as ,可以看到结果,并生成hello.abc。

8、使用编译出来的avmplus_sd.exe执行hello.abc,也可以看到相同的结果,执行命令:avmplus_sd.exe hello.abc。在参照编译完写总结时发现有哥们已经写好了。部份原文出处:http://www.wwswf.com/?p=831

Posted: 七月 25th, 2010 under 随便写点 - No Comments.

ubuntu编译lightspark

一、安装git
sudo apt-get install git-core
二、下载lightspark
git clone git://github.com/alexp-sssup/lightspark.git  lightspark
三、安装   
# cd lightspark
# mkdir build
# cd build
# cmake -DCMAKE_BUILD_TYPE=Release -DCOMPILE_PLUGIN=1 ..
# make
# make install (should be run with root privileges
需要安装以下包
cmake, nasm, llvm-dev (>= 2.7) or llvm-2.7-dev, libsdl1.2-dev, libgl1-mesa-dev, libxext-dev, libcurl4-gnutls-dev or libcurl4-openssl-dev, libxml2-dev, zlib1g-dev, libnspr4-dev, libavcodec-dev, libpcre3-dev, libftgl-dev, libglew1.5-dev, xulrunner-dev, libgtkglext1-dev, libffi-dev
安装命令:
sudo apt-get install cmake nasm llvm-dev libcurl4-openssl-dev libxml2-dev zlib1g-dev libnspr4-dev libavcodec-dev libpcre3-dev libftgl-dev libglew1.5-dev xulrunner-dev libgtkglext1-dev libffi-dev

Posted: 七月 22nd, 2010 under 随便写点 - No Comments.

VS2008控制台程序与WI32应用程序切换

    使用VS2008创建WIN32项目时,可选的有Win32控制台应用程序和WIN32项目。这两者的区别是控制台程序运行就是DOS界面,而项目一般用于开发可视化界面程序。两者的主函数也不同,一个是main函数,而另一个则是WinMain函数 。有时我们因创建时的误操作原本想创建WIN32控制台程序却创建成了WIN32项目。这时我们可能需要对他们进行转换。

以VS2008为例:

项目——> 项目属性——> 配置属性——> 链接器——> 系统——> 子系统

这里选择控制台(SUBSYSTEM:CONSOLE)  则表示此项目是WIN32控制台程序

而选择Windows (/SUBSYSTEM:WINDOWS) 则表示为 WIN32项目

Posted: 七月 22nd, 2010 under 随便写点 - No Comments.

开源Flash Player

一、Gnash

http://www.gnu.org/software/gnash/  

二、Flirt

http://flirt.sourceforge.net/

三、Swfdec

http://swfdec.freedesktop.org/wiki/

四、Lightspark

http://lightspark.sourceforge.net/

Posted: 七月 20th, 2010 under 随便写点 - No Comments.