2009-05-12 6 views
2

J'ai un morceau de données binaires assez aléatoires. Je veux trouver où ce morceau existe dans un fichier, combien de fois il se produit, et à quels décalages d'octets (ou de secteurs). Des idées sur la façon de faire cela?Recherche d'un bloc binaire dans un fichier

Merci, Justin

+0

Désolé, n'a pas remarqué la balise linux jusqu'à maintenant. –

Répondre

2

je recommanderais X-Ways WinHex pour cela. Je me retrouve souvent à l'utiliser pour rechercher des données arbitraires sur des disques durs ou des fichiers d'image disque volumineux.

+0

+1, bel outil même s'il est centré sur Win ;-) – DCookie

3

Je crois qu'aucune commande existante ne fait exactement ce que vous voulez. Si votre morceau est petit et que votre fichier tient dans la mémoire, il est facile d'écrire le vôtre. Il suffit de parcourir le contenu du fichier, en appliquant strncmp à chaque position.

Si votre fichier est très volumineux mais qu'il tient dans votre espace d'adressage, vous pouvez faire la même chose avec mmap.

Si votre morceau n'est pas petit, vous serez probablement mieux d'utiliser le Boyer-Moore algorithm au lieu de strncmp. Ce n'est pas encore trop de travail car il existe déjà des implémentations que vous pouvez utiliser.

+0

+1, algorithme astucieux – DCookie

+0

C'est ce que j'ai fini par faire, avec mmap et memcmp. Cela fonctionne, mais je pensais qu'il devrait y avoir une commande qui le fait déjà. – Justin

0

Vous pouvez faire un peu de cela avec grep

Cette affiche les lignes avec l'octet décalage

grep --text --byte-offset 'ls' /bin/ls

Ajouter un paramètre --count pour obtenir le nombre total de matches.

+0

Je l'ai fait aussi, mais la chose est que j'ai un fichier qui contient le morceau. Je ne peux pas trouver un moyen de faire grep chercher le contenu d'un fichier dans un autre fichier. – Justin

Questions connexes