Actionscript 3 Flash ABC:<;的数字部分是什么;文件>;。as$<;数量>;在swfdump中

Actionscript 3 Flash ABC:<;的数字部分是什么;文件>;。as$<;数量>;在swfdump中,actionscript-3,flash,Actionscript 3,Flash,如果我取一个swf,通过swfdump运行它 swfdump.exe -abc file.swf > ABC.txt 第一次运行时,我可能会在ABC.txt中获得如下输出 ObjectConfig.as$60 在同一SWF的后续运行中,会得到不同的输出 ObjectConfig.as$61 $后面的数字是什么意思?这是调试元数据的一部分,当您进行调试编译时,mxmlc编译器会将其添加到字节码中,debug=true。如果您执行普通版本编译,则会忽略此信息 此元数据存储文件名和行号,以

如果我取一个swf,通过swfdump运行它

swfdump.exe -abc file.swf > ABC.txt
第一次运行时,我可能会在ABC.txt中获得如下输出

ObjectConfig.as$60
在同一SWF的后续运行中,会得到不同的输出

ObjectConfig.as$61

$后面的数字是什么意思?

这是调试元数据的一部分,当您进行调试编译时,mxmlc编译器会将其添加到字节码中,
debug=true
。如果您执行普通版本编译,则会忽略此信息


此元数据存储文件名和行号,以便在调试时可以看到源代码中的位置。虽然我不确定这些特定数字的确切含义,但它们似乎是调试器文件的唯一标识符或索引,可能是在两个同名类的情况下。

我能看到的最好情况是在swfdump的源代码中,它调用swf_GetString。在这个链的某个地方,它在类名的末尾添加了一个类似于debugLinescopeDepth的内容:

char* swf_GetString(TAG*t)
{
    int pos = t->pos;
    while(t->pos < t->len && swf_GetU8(t));
    /* make sure we always have a trailing zero byte */
    if(t->pos == t->len) {
      if(t->len == t->memsize) {
    swf_ResetWriteBits(t);
    swf_SetU8(t, 0);
    t->len = t->pos;
      }
      t->data[t->len] = 0;
    }
    return (char*)&(t->data[pos]);
}
char*swf\u GetString(TAG*t)
{
int pos=t->pos;
而(t->poslen&swf_GetU8(t));
/*确保我们始终有一个尾随的零字节*/
如果(t->pos==t->len){
如果(t->len==t->memsize){
swf_可写息税前利润(t);
swf_SetU8(t,0);
t->len=t->pos;
}
t->data[t->len]=0;
}
返回(char*)和(t->data[pos]);
}