swiffas
1.0.0
一个小型Python 2库,提供:
最初的意图是提供从编译的AS3代码到LLVM IR的转板器。
其他语言中有一两个语言,但大多数人都被刻薄,或者它们太完整而无法解析我的目标文件。
序列化回到SWF文件应该相对简单地添加。
pip install swiffas
请看一下example.py 。
无论如何,这是一个快速的摘要:
import swiffas
from swiffas import swftags
# parse the SWF file
p = swiffas . SWFParser ()
with open ( 'example.swf' , 'rb' ) as f :
p . parse ( f )
print 'has' , p . properties . frame_count , 'frames'
print 'has' , len ( p . record_headers ), 'records; parsed' , len ( p . tags ), 'of them'
# get each exported AS3 program in the SWF file
as3_exports = filter ( lambda x : isinstance ( x , swftags . DoABC ), p . tags )
# print some information about them
for as3_export in as3_exports :
as3 = swiffas . ABCFile ( as3_export . bytecode )
print as3_export . name , 'has' , as3 . method_count , 'methods'
# print all the strings used in the program
print ' n ' . join ( map ( lambda sinfo : sinfo . value , as3 . constant_pool . strings ))分别在swiffas/swftags.py和swiffas/avm2.py中找到每个解析的SWF和AVM2对象的结构。 _struct列表的每个元素都在避免化期间在对象上实例化(如果其大小不是没有,则为false或0)。
_struct中的每个元组都是形式(type, name, optional size or existence boolean) 。大小可能是整数,或者参考上一个字段的值。
元组的特殊情况是其类型为bytes的地方,是列表中的最后一个元素, None大小。这代表了一个占用对象其余部分的字段,谁的内容是这些字节。
尚无AS3 VM打包(尚未),因此您将在每个方法的身体上手动迭代,并将所有索引链接起来。
请参阅swiffas/swftags.py 。缺少标签在底部列出。
当前的限制只是您无法在字节对象中编码一个BitFields。 BitObject和Untable Abackable类只需要组合。
请参阅swiffas/avm2ins.py 。
包括规格中的所有内容都包括在内,几种无证件说明(包括所有FLASCC的说明)。
这张桌子中有一些无证件的,我们不支持,但厌倦了有一些错误的条目。
但是,最好与Adobe的ActionScript虚拟机的源代码删除交叉检查(缺点是您必须在大量的cruft中导航才能获得所需的东西)。
根据MIT许可发布。请参阅LICENSE以获取完整的许可文本。