我还没有找到以自动化方式执行此操作的工具,但我发现通过研究 SWF 的反汇编版本很容易找到信息,可使用 Adobe 的SWF 调查工具。
为此,将指定 RSL 依赖项的 SWF 加载到 SWF 调查器中,然后在“SWF 反汇编程序”选项卡上查看反汇编代码(使用“使用文本视图打开...”按钮最容易弹出外部编辑器)。
RSL 依赖项在 SWF 函数的定义中指定info()
,一个以如下内容开头的块:
function info():Object /* disp_id=0 method_id=57 nameIndex = 75 */
跨域 RSL 依赖项在cdRsls
属性中列出,其他在rsls
属性中列出。这些列表填充了许多RSLData
对象,并且很容易看到 RSLData 构造函数的参数被推入堆栈。例如,以下部分添加了两个可能的 URL 来检索 Flex 4.6“框架”库:
13 findpropstrict mx.core::RSLData //nameIndex = 6
15 pushstring "http://fpdownload.adobe.com/pub/swz/flex/4.6.0.23201/framework_4.6.0.23201.swz"
18 pushstring "http://fpdownload.adobe.com/pub/swz/crossdomain.xml"
21 pushstring "abd49354324081cebb8f60184cf5fee81f0f9298e64dbec968c96d68fe16c437"
24 pushstring "SHA-256"
27 pushtrue
28 pushtrue
29 pushstring "default"
31 constructprop mx.core::RSLData (7) //nameIndex = 6
34 findpropstrict mx.core::RSLData //nameIndex = 6
36 pushstring "framework_4.6.0.23201.swz"
39 pushstring ""
41 pushstring "abd49354324081cebb8f60184cf5fee81f0f9298e64dbec968c96d68fe16c437"
44 pushstring "SHA-256"
47 pushtrue
48 pushtrue
49 pushstring "default"
51 constructprop mx.core::RSLData (7) //nameIndex = 6
54 newarray [2]
newarray [2]
底部的行似乎表明它们代表同一文件的两个可能位置(即,后备 URL)。如果提供了单个 URL,则将创建一个 RSLData 对象和newarray [1]
一行。
此代码对应于与 Flex SDK 捆绑在一起的标准 flex-config.xml 文件中的以下定义:
<!-- Framework SWC -->
<runtime-shared-library-path>
<path-element>libs/framework.swc</path-element>
<rsl-url>http://fpdownload.adobe.com/pub/swz/flex/4.6.0.23201/framework_4.6.0.23201.swz</rsl-url>
<policy-file-url>http://fpdownload.adobe.com/pub/swz/crossdomain.xml</policy-file-url>
<rsl-url>framework_4.6.0.23201.swz</rsl-url>
<policy-file-url></policy-file-url>
</runtime-shared-library-path>
最后,作为参考,这里是 RSLData 类的构造函数的签名,看看值对应什么参数:
public function RSLData(rslURL:String = null,
policyFileURL:String = null,
digest:String = null,
hashType:String = null,
isSigned:Boolean = false,
verifyDigest:Boolean = false,
applicationDomainTarget:String = "default")