【问题标题】:Is there a way to inspect a SWF to see what RSLs it uses?有没有办法检查 SWF 以查看它使用了哪些 RSL?
【发布时间】:2013-04-13 05:39:14
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: apache-flex flash


    【解决方案1】:

    我还没有找到以自动化方式执行此操作的工具,但我发现通过研究 SWF 的反汇编版本很容易找到信息,可使用 Adob​​e 的 SWF Investigator tool

    为此,将指定 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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      相关资源
      最近更新 更多