这是棘手的,我想你可以做这样......顺便说一下,我已经下载了libmagic源,并看着它......
那里面有一个功能在minifile.c
中调用magic_read_entries
(这是我从sourceforge下载,它从外部文件中读取纯香草源。
你可以追加magic
文件(这是在/ etc目录中找到),以结束图书馆的代码,就像这样s cat magic >> libmagic.a
。在我的系统中,magic
是474443字节,libmagic.a
是38588字节。
在magic.c
文件,你就需要改变magichandle_t* magic_init(unsigned flags)
功能,在函数的末尾添加行magic_read_entries
和修改功能本身在图书馆本身的数据拉的偏移读取,对待它作为指向char的指针(char **)并使用它而不是从文件中读取。既然你知道图书馆数据的偏移量在哪里读取,那应该不难。
现在函数magic_read_entries
将不再使用,因为它不会再从文件中读取。函数`magichandle_t * magic_init(无符号标志)'将负责加载条目,你应该在那里确定。
如果您需要进一步的帮助,让我知道,
编辑: 我从sourceforge.net使用旧的“libmagic”这里是我做过什么:
- 提取下载的档案到我的主目录中,unzip/untarring档案将创建一个名为的文件夹libmagic。
- 创建libmagic内的文件夹,并把它测试
- 复制原magic.c和minifile.c到测试
- 使用封闭diff的输出凸显差异,其应用到magic.c来源。
48a49,51
> #define MAGIC_DATA_OFFSET 0x971C
> #define MAGIC_STAT_LIB_NAME "libmagic.a"
>
125a129,130
> /* magic_read_entries is obsolete... */
> magic_read_entries(mh, MAGIC_STAT_LIB_NAME);
251c256,262
<
---
>
> if (!fseek(fp, MAGIC_DATA_OFFSET, SEEK_SET)){
> if (ftell(fp) != MAGIC_DATA_OFFSET) return 0;
> }else{
> return 0;
> }
>
- 然后发出使
- 魔术文件(我从/ etc复制,下Linux嵌入12.2)被级联到libmagic.a文件,即
cat magic >> libmagic.a
。 SHA的校验和为魔法(4abf536f2ada050ce945fbba796564342d6c9a61魔术), 这里是魔术的确切数据 (-rw-r - r - 1 root root 474443 2007-06-03 00:52/etc/file/magic)在我的系统上。
- 这里是为minifile.c源的差异,通过运行使再次提出申请,并重建minifile可执行文件。
40c40
< magic_read_entries(mh,"magic");
---
> /*magic_read_entries(mh,"magic");*/
它应该工作即可。如果不是,则需要通过修改MAGIC_DATA_OFFSET来调整库中的偏移量以便读取。如果你愿意,我可以将魔术数据文件粘贴到pastebin中。让我知道。
希望这会有所帮助, 最好的问候, 汤姆。
我还想过使用/修改libmagic的源代码,所以我也发现了sourceforge版本,但是我怀疑它们与ubuntu repo中的libmagic-dev不一样。如果您使用'man libmagic'或检查http://linux.die.net/include/magic.h,则时间戳是2003.SF中的一个是2000(http://sourceforge.net/projects/libmagic/files /)。否则,我想这将是一个很好的解决方案,我可以开始研究如何实现它。 – Kache 2010-01-23 23:36:23
它看起来不像来自更新的libmagic 5.03的'magic'条目与旧的libmagic alpha兼容。看起来像libmagic 5.03包含在5.03文件中(来自'man file',ftp.astron.com/pub/file/file-5.04.tar.gz),所以我会试着去解决这个问题。我想我可能会陷入困境试图做附加&指针抵消的事情,如果我到了那一点。 – Kache 2010-01-24 02:19:44
无论哪种方式,如果您需要我的帮助,请不要犹豫,通过回复问! ;) – t0mm13b 2010-01-24 02:29:30