每个二进制文件都有一个与之关联的幻数,有谁知道如何从文件中检索此信息?

有帮助吗?

解决方案

使用 libmagic 来自 文件 如果这是您的目标,请尝试嗅探文件类型。

Unix 上的二进制文件中没有通用的“魔法”数字,尽管不同的格式可能会定义自己的数字。上面的库了解其中的许多内容,并且还使用各种其他启发式方法来尝试找出文件的格式/类型。

其他提示

file <file_name>

幻数通常存储在(Linux)的:

/usr/share/file/magic

也检查此链接,有人试图用libmagic获得在C程序中的信息,可能是有用的,如果你正在写自己的东西。

UNIX文件命令使用的幻数。看到文件手册页了解。(和在哪里可以找到magic文件)

阅读此: http://linux.die.net/man/5/magic

这是复杂的,并且依赖于你正在寻找的特定文件类型。

有一个文件这反过来使用魔法库指令,魔库读取一个文件/ etc称为magic发现(这取决于具体的安装和可能有所不同),其中的细节是什么文件的前几个字节,并告诉file一个什么样的文件,它的,是它,JPG,二进制,文本,shell脚本。有一个老版本在SourceForge上libmagic发现。顺便说一下,有一个相关的答案,这这里

希望这有助于 最好的祝福, 汤姆。

在简释@号的回答是:

实施例下面将使用默认的魔术数据库查询在命令行上传递的文件。 (本质上的实现文件的命令。参见人libmagic 更多细节/功能。

#include <iostream>
#include <magic.h>
#include <cassert>
int main(int argc, char **argv) {
    if (argc == 1) {
            std::cerr << "Usage "  << argv[0] << " [filename]" << std::endl;
            return -1;
    }
    const char * fname = argv[1];
    magic_t cookie = magic_open(0);
    assert (cookie !=nullptr);
    int rc = magic_load(cookie, nullptr);
    assert(rc == 0);
    auto f=  magic_file(cookie, fname);
    if (f ==nullptr) {
        std::cerr << magic_error(cookie) << std::endl;
    } else {
        std::cout << fname << ' ' << f << std::endl;
    }

}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top