11
votes

Comment obtenir un numéro magique d'un fichier binaire

Il existe un numéro magique associé à chaque fichier binaire, est-ce que quelqu'un sait comment récupérer ces informations du fichier?


1 commentaires

Si vous souhaitez écrire un logiciel pour prendre en charge plusieurs formats de fichiers, vérifiez simplement le numéro magique de chaque format à son tour jusqu'à ce que l'un d'entre eux correspond. Si vous êtes simplement curieux, utilisez la commande fichier ci-dessous et rappelez-vous qu'il n'est ni complet ni bulletproof, il n'y a pas de norme pour ce truc.


6 Réponses :


1
votes

La commande Unix File utilise un numéro magique. Voir le Page man pour plus. (Et où trouver le fichier magique) < / p>


0 commentaires


9
votes
/usr/share/file/magic

0 commentaires

1
votes

Il y a un Fichier Commande qui utilise à son tour une bibliothèque magique, la magie La bibliothèque se lit à partir d'un fichier trouvé dans / etc appelé magie (il s'agit d'une installation dépendante et peut varier), qui détaillent quels sont les premiers octets du fichier et indique le fichier Quel type de fichier c'est, que ce soit, jpg, binaire, texte, script shell. Il y a une ancienne version de Libmagic trouvé sur Sourceforge. Incidemment, il existe une réponse connexe à ce ici .

J'espère que cela aide, Meilleures salutations, Tom.


0 commentaires

6
votes

Utilisez libmagic à partir du fichier pour essayer de renifler le type de fichier si c'est votre objectif.

Il n'y a pas de chiffres généraux "magiques" dans des fichiers binaires sur UNIX, bien que différents formats puissent définir leur propre. La bibliothèque ci-dessus connaît beaucoup de ceux-ci et utilise également diverses autres heuristiques pour essayer de déterminer le format / type de fichier.


1 commentaires

Mise à jour: sur les systèmes Ubuntu actuels, le nom du paquet est libmagic-dev



0
votes

Expliquer sur la réponse @ NOS:

L'exemple ci-dessous utilise la base de données magique par défaut pour interroger le fichier transmis sur la ligne de commande. (Essentiellement une implémentation de la commande fichier em>. Voir Man Libmagic em> pour plus de détails / fonctions. P>

#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;
    }

}


0 commentaires