【问题标题】:Use magic.mgc from another language使用其他语言的magic.mgc
【发布时间】:2016-03-20 17:34:49
【问题描述】:

我目前正在从事一个项目,该项目涉及阅读file 的魔法文件(没有绑定)。我想知道如何以另一种语言(如 Go)直接从编译的二进制文件 magic.mgc 读取文件测试,因为我不确定应该如何解释其内容。

【问题讨论】:

  • 原则上,你可以:file 的来源是online,并且不会做任何你无法重新实现的事情,man magic 描述了它正在尝试做的事情。用于生成magic.mgctext source 也在线,可能更容易解析。不过,这距离真正帮助您做到这一点还有很长的路要走。
  • 感谢您的评论,@twotwotwo。一开始,我想找到一种方法来使用现有的.mgc 文件,而不是自己编译它。不过,如果事实证明这是不可能的,我想我不得不哈哈。
  • 看起来这是实际的 .mgc 编译器和解析器,大约 70kb 和 3000 行:github.com/file/file/blob/master/src/apprentice.c——逆向工程并非完全不可能,但看起来很痛苦(例如,@987654331 @ 在内部确实做了很多匹配类型)。顺便说一句,golang.org/src/net/http/sniff.go 中有一个非常简单的嗅探器
  • 我没见过snifffile 源代码确实很复杂。请参阅我在文件邮件列表中从 Christos Zoulas 本人那里得到的答案。感谢您的帮助!

标签: file unix go libmagic


【解决方案1】:

根据文件主要贡献者 Christos Zoulas 的说法:

如果你想直接使用它们,你 需要了解二进制格式(随时间变化)并加载 它在您自己的数据结构中。 [...] 解析文件的代码在 apprentice.c 中。见check_buffer() 为读者和 apprentice_compile() 为作者。有 一个 4 字节的幻数,后跟一个 4 字节的版本号 通过 MAGIG_SET (2) 的 4 字节数,每组计数一个(ascii, 二进制)后跟一个'struct magic'条目数组,在本机 字节格式。

这就是人们应该期待的格式!然而,它必须像原始文件一样被解析。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多