我有像这样的反编译闪存的动作脚本
public function getResourceAsByteArray(resID:int):flash.utils.ByteArray
{
var tempByteArray:*=null;
var fName:*=this.clazzName;
var resDataDup:*=new clazzByteArray() as flash.utils.ByteArray;
var resPos:*=this.post;
var resLength:*=1024;
var resultByteArray:*=new flash.utils.ByteArray();
resDataDup.position = resPos;
resDataDup.readBytes(resultByteArray, 0, resLength);
return resultByteArray;
}
public class clazzByteArray extends mx.core.ByteArrayAsset
{
public function clazzByteArray()
{
super();
return;
}
}
我不是动作脚本程序员,但我尝试理解这个功能。
resDataDup
是来自扩展ByteArray
的类的本地对象,我认为使用此初始化方式resDataDup
将始终为空,因此下一个readBytes调用始终会失败。它有可能以其他方式运作吗? (有些人可以在调用readBytes之前将数据放到resDataDup
),或者反编译器没有正确生成它。
答案 0 :(得分:4)
你是完全正确的。此代码无效。我怀疑你的反编译器没有告诉你的是ByteArrayAssets主要用于Flex中的embedded assets。这意味着clazzByteArray
实际上引用了一些曾经嵌入的 thing 。但是,这在这里没有用。
答案 1 :(得分:1)
反编译器错了。正如@cwallenpoole所说,ByteArray很可能是嵌入mxmlc(Flex SDK编译器)的资产,而不是使用不同机制的Flash IDE。
但是有一些反编译器可以处理Flex项目,例如Sothink Decompiler。如果您已经在使用它,如果您告诉它将SWF反编译为Flex项目而不是.fla,那么您可能会有更多的运气。