2015-12-15 108 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字節的版本號 本地 字節格式。

這就是人們應該期待的格式!然而,它必須像原始文件一樣被解析。

相關問題