1

我正在调查一个 Flex 应用程序的问题,该应用程序试图从意外的 URL 下载(至少)一个 Flex 框架 RSL。我无法重现该问题,但我对mxmlc构建配置中 RSL 规范的某些方面也有些不确定。

鉴于所有这些,能够检查列出 RSL 依赖项的 SWF 文件以准确了解存在哪些依赖项以及与之关联的 URL 将很有帮助。

有没有这样做的方法?我已经尝试过 Adob​​e 的 SWF Investigator,但我没有看到任何明显的地方调用了此类依赖项。(我猜它们是mxmlc由 Flash Player 生成的而不是本机生成的代码处理的,所以它们没有被列为 SWF 的属性?)

该应用程序是使用/反对 Flex 4.6,FWIW 构建的。

4

1 回答 1

1

我还没有找到以自动化方式执行此操作的工具,但我发现通过研究 SWF 的反汇编版本很容易找到信息,可使用 Adob​​e 的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")
于 2013-04-12T21:39:14.893 回答