URL:     https://linuxfr.org/users/jpopcenter/journaux/d-une-image-nommee-iso-a-un-premier-probe-en-haskell
Title:   D’une image nommée .iso à un premier probe en Haskell
Authors: s[e]th & h[o]lth
Date:    2026-09-03T03:14:41+02:00
License: CC By-SA
Tags:    haskell et modding
Score:   0


Je travaille depuis quelque temps sur **Hexegesis**, un projet expérimental écrit en Haskell dont l’objectif est de comprendre et, à terme, de transformer les formats binaires rencontrés dans les jeux FromSoftware sur PlayStation 3. Le premier corpus étudié est la version PlayStation 3 originale de *Demon’s Souls*.

En cherchant de la documentation, j’ai constaté que les ressources techniques de qualité consacrées aux formats binaires, à la rétro-ingénierie et au modding sont très majoritairement rédigées en anglais. Je souhaite donc construire la ressource francophone que j’aurais aimé trouver : un texte accessible à une personne débutante, mais écrit avec un vocabulaire exact, sans remplacer les véritables concepts techniques par des approximations.

Je viens de publier le premier article de cette série sur DEV Community :

[**D’une image nommée `.iso` à un premier probe en Haskell**](URL_DE_L_ARTICLE_DEV_TO)

L’article part d’un fichier dont le nom se termine par `.iso`, sans considérer cette extension comme une preuve de son format. Nous observons directement ses octets avec des lectures `xxd` précisément bornées, puis nous reconstruisons progressivement plusieurs informations :

- l’en-tête du *Primary Volume Descriptor* défini par ISO 9660 ;
- l’identifiant du volume ;
- le nombre de blocs logiques et la taille de chacun d’eux, enregistrés selon les deux ordres d’octets ;
- la séquence des descripteurs de volume et son terminateur ;
- le passage d’un *Supplementary Volume Descriptor* générique à la reconnaissance limitée d’un marqueur Joliet ;
- le marqueur `PlayStation3` et l’identifiant produit observés dans la zone système du disque.

Les commandes sont accompagnées de leurs sorties réelles. L’idée n’est pas seulement de donner les valeurs obtenues sur mon image, mais de montrer où elles se trouvent et comment les reconstruire : un lecteur qui observe d’autres octets au même emplacement doit pouvoir appliquer le même raisonnement à son propre exemplaire.

La seconde partie reproduit cette enquête directement dans GHCi. Le prototype Haskell effectue des lectures en mode lecture seule, contrôle leur longueur, décode les entiers little-endian et big-endian, borne le parcours des descripteurs et affiche finalement quatre informations :

```text
ps3.product-id=BLES-00932
iso9660.volume-id=PS3VOLUME
iso9660.logical-block-size=2048
joliet.level=1
```

Ce résultat reste volontairement modeste. Le programme ne parcourt encore aucun répertoire, n’extrait aucun fichier, ne déchiffre aucune donnée et ne prétend pas valider intégralement ISO 9660 ou Joliet. Plusieurs observations intéressantes sont laissées hors du code lorsqu’elles ne servent pas ce résultat concret.

Je publie d’abord cette série, article après article, sur DEV Community afin d’éprouver la progression, le vocabulaire et les exemples auprès de lecteurs réels. Mon objectif à plus long terme est de reprendre l’ensemble de ces articles, de corriger ce qui doit l’être et d’en faire un **cours complet et cohérent en français**, que je souhaiterais ensuite publier sur **Zeste de Savoir**.

C’est précisément pour cela que les retours m’intéressent dès maintenant. Je serais notamment preneur de remarques sur les points suivants :

- la progression reste-t-elle accessible à quelqu’un qui découvre les formats binaires ?
- le vocabulaire est-il suffisamment précis sans devenir inutilement opaque ?
- les sorties des commandes permettent-elles réellement de refaire le raisonnement ?
- la partie Haskell avance-t-elle au bon rythme ?
- certaines affirmations relatives à ISO 9660, Joliet ou aux images de disque PlayStation 3 devraient-elles être corrigées ou mieux nuancées ?
- quels sujets devraient absolument figurer dans la suite ou dans le futur cours ?

Le dépôt du projet et les notes de recherche sont également disponibles ici :

[**Hexegesis sur GitHub**](https://github.com/hexegesis/hexegesis)

Merci d’avance à celles et ceux qui prendront le temps de lire, de relever une imprécision ou simplement de décrire l’endroit où ils ont perdu le fil. Pour cette série, un retour sur la manière d’apprendre compte autant qu’une correction technique.

