Frage

Es ist eine magische Zahl mit jeder Binärdatei verbunden ist, Wer weiß, wie diese Informationen aus der Datei abrufen?

War es hilfreich?

Lösung

Verwenden Sie libmagic von der Datei Paket, um zu versuchen und die Art der Datei erschnüffeln, wenn das Ihr Ziel ist.

Es gibt keine allgemeinen „magischen“ Zahlen in binären Dateien auf Unix, obwohl verschiedene Formate ihre eigenen definieren könnten. Die obige Bibliothek kennt viele von denen, und verwendet auch verschiedene andere Heuristiken und Figur aus dem Format / Dateityp zu versuchen.

Andere Tipps

file <file_name>

sind magische Zahlen in der Regel gespeichert in (Linux):

/usr/share/file/magic

überprüfen Sie auch diesen Link, jemand versucht libmagic zu verwenden, um die Informationen in C-Programm zu erhalten, könnte nützlich sein, wenn Sie schreiben etwas selbst.

Der Unix-Datei Befehl verwendet magische Zahl. finden Sie in der Datei Manpage mehr. (und wo die magische Datei zu finden)

Lesen Sie dieses: http://linux.die.net/man/5/magic

Es ist komplex und hängt von dem jeweiligen Dateityp Sie suchen.

Es gibt einen Datei Befehl, die wiederum eine magische Bibliothek verwendet, die Magie Bibliothek liest aus einer Datei in / etc genannt magic gefunden (diese Installation abhängig und können variieren), die Details, welche die ersten paar Bytes der Datei sind und erzählt die file welche Art von Datei es sich handelt, sei es, jpg, binär , Text, shell-Skript. Es gibt eine alte Version von libmagic gefunden auf Sourceforge. Im Übrigen gibt es eine ähnliche Antwort auf diese hier .

Hope, das hilft, Freundliche Grüße, Tom.

Darlegung auf @ nos Antwort:

Beispiel unten verwendet die Standard magische Datenbank die Datei auf der Befehlszeile übergeben abzufragen. (Im Wesentlichen eine Implementierung der Datei Befehl. Sehen Mann libmagic für weitere Informationen / Funktionen.

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top