【问题标题】:Sum of the size of all tags in SWF == SWF size specified in header?SWF 中所有标签的大小总和 == 标题中指定的 SWF 大小?
【发布时间】:2015-01-26 11:57:07
【问题描述】:

我正在编写一个 SWF 解析器,但我目前遇到了这个问题。 The header spec 表示 SWF 的大小在标头本身中指定(签名 3 字节,版本 1 字节,大小 4 字节...)

但是,如果我遍历每个标签并获得它的大小,我最终会得到接近标题中指定的大小,但不是那个确切的大小。

例子:

sig:        FWS
version:    10
length:     3081
screen:     800.0x600.0
fps:        30.0
num frames: 1
4
458
4
3
26
853
1610
66
0
0

num frames 之后打印的每个数字都是标签的大小。如果我总结所有这些,我得到3024。标头本身是1 + 1 + 1 + 1 + 4 + X + 2 + 2,在这种情况下是X = 8(它是一个可变长度字段)。这就是20,加上所有标签大小的总和,得到3044

3081 - 3044 = 37 bytes 剩余字节在哪里?

【问题讨论】:

    标签: actionscript-3 flash magic-numbers


    【解决方案1】:

    我做得对,我只是忘了求和所需的字节数。

    例子:

    |header|tag 24 bytes|tag 37 bytes|tag 7364 bytes|tag 14 bytes|
    

    所以我们有:

    SWF(签名,3 个字节)

    +

    version(1 字节)

    +

    size(4 字节)

    +

    rect(假设是 9 个字节)

    +

    frame rate(2 字节,第一个被忽略,但仍计入总大小)

    +

    frame count(2 个字节)。

    这为我们提供了总共21 字节的标头。

    然后我们开始读取每个标签块。

    tag type and length(2 个字节)

    +

    (如果标签长度等于 63,则另外 4 个字节。这只会发生在本例中的第 3 个标签中)

    +

    (标签的实际大小,本例为24

    在这个例子中,我们有这样的:

    1. 这个标签的大小是2 + 24

    2. 下一个标签的大小是2 + 37

    3. 下一个是2 + 4 + 7364

    4. 最后一个是2 + 14

    所以文件的最终大小是:21(标题)+26(标签类型和长度的2字节字段大小+实际标签的24)+39(第二标签)+ 7372(第三个标签)+16(第四个标签)=7474

    当您读取包含大小的 4 字节字段时,该数字应该与您从标头中获得的数字相匹配。

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多