Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

: Hachoir version 0.6

Posté par Victor STINNER (page perso, ). Modéré le 29 octobre 2006.
Un an après la naissance du projet, Hachoir sort dans sa version 0.6. C'est une suite d'outils développés dans le langage Python ayant pour but de manipuler facilement un fichier binaire tel qu'un arbre de champs typés. Le projet a été éclaté en plusieurs composants dont les principaux sont : hachoir (c½ur du système), hachoir-parser (quarantaine de parseur des formats les plus courants), hachoir-metadata (extraction de méta-données) et hachoir-urwid (visualisation de fichier binaire).

Hachoir supporte maintenant l'édition de fichier : il est possible de modifier la valeur d'un champ, de supprimer un champ ou encore d'en insérer. hachoir-strip est un programme d'exemple exploitant cette possibilité : il va supprimer tous les champs qu'il juge inutile, c'est-à-dire les méta-données, les octets de bourrage, index pour les vidéos, etc. Il peut être utilisé pour rendre un fichier anonyme ou en réduire légèrement sa taille.

Autre amélioration notable : la possibilité d'ouvrir des fichiers corrompus et/ou tronqués. Dans la mesure du possible, le parseur va tenter de corriger l'erreur puis de continuer son travail. Cette version apporte également la possibilité d'utiliser Hachoir sur un pipe, ce qui permet de parser un flux de données au fur et à mesure (par ex. : un flux réseau).

Pour stocker le texte, Hachoir utilise maintenant uniquement Unicode, ce qui évite d'avoir à se soucier du jeu de caractères. Cette version fonctionne également sur toutes les implémentations de Python (CPython, Stackless, pypy, IronPython, Jython), même si des retouches mineures sont parfois nécessaires. Pour finir, une interface graphique basée sur wxPython est en cours de développement.

> Lire la dépêche (17 commentaires, moyenne: 2,3).  

Vous avez demandé le commentaire #769553.

Intéréssant

Posté par Diablo150 (page perso, ) le 29/10/2006 à 17:44. (lien). Évalué à 2.

Ca commence à devenir drôlement intéressant, mais je vais peut être attendre la sortie de l'interface.
Non pas que je sois anti-console, mais dans ce genre de manipulations, ça doit être bien plus souple.

Est ce que ça peut, par exemple modifier les chaînes de caractères dans un binaire ?

  • [^]Re: Intéréssant

    Posté par Victor STINNER (page perso, ) le 29/10/2006 à 20:41. (lien). Évalué à 3.

    Oui, c'est vrai que pour l'instant le seul moyen d'édition un fichier est d'attaquer l'API en Python. Il y a quelques exemples sur la page :
    http://hachoir.org/wiki/HachoirEditor

    Est ce que ça peut, par exemple modifier les chaînes de caractères dans un binaire ?

    Il faut avoir un parseur pour le format que tu veux éditer. Mais une fois que le parseur est écrit, on manipule des objets Python qui vont s'occuper de convertir les données dasn le bon format. Pour une chaîne de caractère, Hachoir s'occupe d'ajouter le préfixe ou le suffixe (pour une chaîne C : ajoute "\0" à la fin, pour une chaîne Pascal : ajoute la longueur en préfixe) et je crois qu'il s'occupe aussi des charsets (ou si ce n'est pas le cas, il le fera très vite :-)). Pour les nombres, il va sérialiser les nombres selon la taille du champ et l'endian. Une liste incomplète et pas à jour des types peut se trouver là :
    http://hachoir.org/wiki/WriteYourParser

    Haypo

    • [^]Re: Intéréssant

      Posté par cosmocat () le 29/10/2006 à 22:33. (lien). Évalué à 3.

      J'avais installé Hachoir 0.5 pour modifier une valeur dans un fichier jpeg. Bon finalement je l'avais pas fait car je crois que c'était pas possible avec cette version.

      Mais j'ai remarqué que ce logiciel, c'est du très bon!! J'en avais profité pour parser plein d'autres fichiers. Vraiment Genial!

      Merci pour tout ce que tu fais...

      • [^]Re: Intéréssant

        Posté par Victor STINNER (page perso, ) le 29/10/2006 à 22:55. (lien). Évalué à 3.

        J'avais installé Hachoir 0.5 pour modifier une valeur dans un fichier jpeg. Bon finalement je l'avais pas fait car je crois que c'était pas possible avec cette version.

        Non, j'ai tardé très longtemps pour développer la partie édition. En fait, nous avons d'abord terminé la partie "lecture". Ensuite, j'ai réfléchi très fort pour trouver un algo potable qui fonctionnerait avec Hachoir. Les contraintes sont assez lourdes : il faut pouvoir éditer un fichier qui est chargé partiellement en mémoire... J'avais tenté une première implémentation il y a quelques mois, mais elle était loin d'être concluante.

        Pour l'édition d'un fichier dans Hachoir 0.6, seules les modifications sont stockées : nouvelles valeurs, champs ajoutés et champs supprimés. La lecture d'un fichier est donc plus "lente" (bon, ça reste du O(1), sauf pour la lecture de l'adresse qui est en O(n) <= à vérifier tout ça), mais par contre c'est plus flexible et plus rapide finalement à mon avis. L'empreinte mémoire est assez faible... ce qui déjà rend l'édition de gros fichier (1 Go ou plus) possible... et permettra à court terme d'implémenter un historique pour permettre d'annuler des modifications (comme l'historique Gimp).

        Autre idée que j'ai eu récement : implémenter un hachoir-diff qui va comparer deux fichiers et noter les champs ajoutés / supprimés / édités. Il faudrait que je trouve un algo de comparaison de fichiers binaires.

        Haypo

        • [^]Re: Intéréssant

          Posté par benoar (Jabber id, ) le 29/10/2006 à 23:16. (lien). Évalué à 1.

          Il faudrait que je trouve un algo de comparaison de fichiers binaires.

          Tu seras peut-être intéressé par ça :
          http://www.daemonology.net/bsdiff/

          [^]Re: Intéréssant

          Posté par Thomas Douillard () le 30/10/2006 à 12:56. (lien). Évalué à 2.

          Je crois qu'il existe des algos de diff xml. L'idée me semble relativement semblable : si je me trompe pas, Hachoir manipule un arbre, comme XML.

          • [^]Re: Intéréssant

            Posté par Victor STINNER (page perso, ) le 30/10/2006 à 13:19. (lien). Évalué à 2.

            Hachoir ne développement jamais toutes les noeuds de l'arbre pour la simple et bonne raison que l'empreinte mémoire est au moins de 10x la taille du fichier. Alors pour faire un diff d'une image ISO par exemple, c'est pas trop possible :-) Il serait mieux d'avoir un diff binaire pour de localiser les modifications dans un des deux fichiers.

            Haypo

            • [^]Re: Intéréssant

              Posté par Thomas Douillard () le 30/10/2006 à 13:48. (lien). Évalué à 2.

              Je pense pas que ce type d'algo nécessite forcément de stocker tout l'arbre en mémoire, on doit pouvoir s'en sortir avec un parcours 'à la demande'.

              En tout cas, un algo de diff binaire générique est "à plat" à priori. Il doit tenter d'aligner au mieux les sous-séquences communes sources et cibles) et ne tient pas du tout compte de la structure arborescente de ton fichier. Dans ce cas, pas besoin de hachoir.

    [^]Re: Intéréssant

    Posté par Bonnefille Guilhem (page perso, ) le 30/10/2006 à 09:33. (lien). Évalué à 4.

    Comme à chaque annonce concernant Hachoir, j'en profite pour faire un peu de pub pour un autre outil de la même famille : DataWorkshop.
    Cet outil, contrairement à Hachoir, est en Java et dispose d'une interface graphique. La description d'un format ("structure" dans le vocabulaire de DataWorkshop) se fait à la souris.

    Je manque un peu de temps pour faire les évolutions que j'ai en tête, mais je promet d'être hyper réactif concernant l'intégration de toute contribution.

    Vous êtes tous les bienvenus.

    Page du projet : https://gna.org/projects/dataworkshop

    • [^]Re: Intéréssant

      Posté par Victor STINNER (page perso, ) le 30/10/2006 à 11:01. (lien). Évalué à 2.

      Ben tiens justement ! J'avais essayé de le lancer, mais alors punaise... impossible de satisfaire ses dépendences. J'ai installé 4 ou 5 bibliothèques Java XML, mais j'ai pas trouvé la bonne.

      J'aimerai beaucoup travailler avec pyConstruct (projet très similaire à Hachoir) et DataWorkshop, en particulier, il faudrait partager du code. Pourrais-tu me contacter par Jabber ? http://www.haypocalc.com/wiki/Victor_Stinner pour toutes mes coordonnées.

      L'objectif à long terme, si c'est réalisable, serait de fédérer nos efforts pour définir une syntaxe commune pour les parseurs. Le but étant de pouvoir à partir de ça générer des structures C, du code Java, Python, etc. J'ai tout noté ici :
      http://hachoir.org/ticket/32

      Haypo