2015-12-15 162 views
1

我目前正在研究一个涉及读取file的魔法文件(无绑定)的项目。我想知道如何用另一种语言(如Go)直接从编译的二进制文件magic.mgc中读取文件测试,因为我不确定如何解释它的内容。使用另一种语言的magic.mgc

+1

原则上,你可以:'file'的来源是[online](https://github.com/file/file),并且不会做任何你不能重新实现的东西,而'man magic'描述了它试图做的事情。用于生成'magic.mgc'的[text source](https://github.com/file/file/tree/master/magic/Magdir)也在线,可能更容易解析。但是,真正帮助你做到这一点还有很长的路要走。 – twotwotwo

+0

感谢您的评论,@twotwotwo。首先,我想找到一种方法来使用现有的'.mgc'文件,而不是自己编译它。如果事实证明是不可能的,但是,我想我不得不哈哈。 –

+0

看起来这是实际的.mgc编译器和解析器,大约70kb和3000行:https://github.com/file/file/blob/master/src/apprentice.c - 完全不可能进行反向工程但它看起来像一个痛苦(就像'file'实际上在内部执行大量的匹配类型)。顺便说一下,在https://golang.org/src/net/http/sniff.go – twotwotwo

回答

2

据克里斯托Zoulas,文件的主要贡献者:

如果你想使用它们直接与你 需要了解二进制格式(随时间变化)和负载 在你自己的数据结构。 [...]解析文件的代码在apprentice.c中。对于读者,请参阅check_buffer() ,作者为apprentice_compile()。 是一个4字节的幻数,后面跟着一个4字节的版本号,后面是MAGIG_SET(2)的4个字节的数字,其后跟着一个'struct magic'项的数组,其中有一个4字节的版本号 本地 字节格式。

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

相关问题