我目前正在尝试编写自定义文件魔术条目来识别某些公司特定的文件格式。
但是,这种格式的神奇字节位于文件的末尾,而不是开头。文件的长度也因文件而异。 在文件版本为
man magic
的 Ubuntu 系统上的 5.41
中,我发现了以下内容:
offset 一个数字,指定要测试的数据在文件中的偏移量(以字节为单位)。 如果是以下情况,则此偏移量可以为负数:
魔术条目的第一个直接偏移量(在延续级别0),在这种情况下,它被解释为从文件末尾向后的偏移量。
按照这个解释,我尝试以以下格式编写一个魔术文件:
-0 byte 0xA2 company format
!:mime application/custom
但是,在最后一个字节为 0xA2(带有
file -m <file> <company file>
)的文件上使用此魔法时,我没有得到任何匹配项。公司文件仍然匹配data
,而不是我的自定义规则。
当尝试使用
file -m <magic> -c
检查打印输出时,它似乎也有点损坏(缺少 -):
unknown, 0: Warning: using regular magic file `<magic>'
cont offset type opcode mask value desc
1: > 0 byte&,=-94,"company format"]
但是,当使用
file -m <magic> -k -l <company file>
检查匹配时,我得到以下输出,这让我相信某些东西应该起作用。
Set 0:
Binary patterns:
Strength = 40@1: company format [application/custom]
Text patterns:
Set 1:
Binary patterns:
Text patterns:
有人能指出我正确的方向吗?
bodo的评论为我解决了这个问题:我没有使用不是有效(int)数字的
-0
,而是使用了-1
。
通过此更改,我的自定义魔法文件显示为:
-1 byte 0xA2 company format
!:mime application/custom
并且按预期工作。