SuperH disassembler
Posté le 11/07/2013 02:53
Pour mes besoin personnel, j'ai réalisé ce désassembleur qui est basé sur la documentation SH3, mais normalement compatible avec nos SH4. Je me doute que ça ne servira pas à grand monde, surtout que le SDK est tout à fait capable de faire de même (enfin, le sdk nous oblige à ce que le fichier binaire soit un addin). Cependant, ça pourra éventuellement servir pour d'autre, et autant partager ce qui est chiant à faire (en l'occurrence, le plus chiant est le switch de plus de 300 lignes qui permet de différencier les instructions
).
Utilisation
Pour l'utiliser, prenez votre fichier binaire et glissez le sur l'exécutable, normalement il devrait vous sortir un fichier output.txt qui contient 3 colonnes :
- La première est l'offset en hexadécimal (numéro de l'octet si vous préférez)
- La seconde est le contenu en hexadécimal (ce contenu fait toujours deux octets)
- La troisième contient la "traduction" en assembleur si elle existe. Notez qu'une traduction peut très bien être disponible alors que les deux octets ne sont que des données. (Il est impossible de différencier une simple donnée d'une instruction, car la seule différence qui les sépare est que l'une va être interprétée par l'ordinateur et pas l'autre car il ne passera jamais dessus)
Un autre moyen d'ouvrir le logiciel est de passer par une ligne de commande :
SHdisassembler.exe "adresse du fichier que vous ouvrez.bin" "adresse du ficher de sortie.txt"
Sachant qu'une instruction fait 2 octets, si vous décalez le fichier en entier d'un seul octet, vous n'obtiendrez pas du tout le même résultat. Pensez-y, ça pourrait être une source d'erreur
Quelques infos pour les curieux et/ou non-initiés :P
- un désassembleur est un logiciel qui va prendre le code d'un fichier binaire (ici, nos g1a), et qui le "transformer" en langage assembleur (qui est un langage pas très compréhensible, mais toujours plus compréhensible que du binaire
).
- Si vous ouvrez un g1a avec, il faudra commencer à lire à partir de la ligne 0x200, car c'est à cet offset que commence la partie binaire d'un g1a, ce qui est avant n'est que l'entête.
- En assembleur sh3, chaque instruction fait 2 octets, voilà pourquoi l'offset compte de 2 en 2, car j'indique le numéro de l'octet.
Je mets les sources avec, mais elles ne sont pas très belles, car j'ai baladé le code plusieurs fois entre le "standard" et la librairie Qt (ce code me sert sur un autre projet : un début d'émulateur que je ne finirais sans doute jamais).
Changelog
v1.00 (11/07/2013) :Version originale
v1.01 (03/08/2013) :
- Correction de nombeux bugs mineurs, oublis d'instructions
- Suppression de toutes les instructions non compatible avec nos calculatrices
- Ajout de l’adresse de destination en commentaire sur le coté droit c'est possible (par exemple pour mov.l @(h'4,pc),r1 , j'affiche l'adresse qui correspond à @(h'4,pc)
- Affichage de certaines valeurs sous forme negative lorsque c'est plus pratique
Fichier joint
Citer : Posté le 19/06/2014 08:09 | #
Moi de même j'veux bien te filer un coup de main, je serais intéressé par développer un émulateur.
Citer : Posté le 19/06/2014 22:10 | #
v1.00 (11/07/2013) :Version originale
Bientôt un an et personne n'avait remarqué ?
Avec la semelle de nos chaussures, on en fait autant
Citer : Posté le 19/06/2014 22:20 | #
De quoi tu parles ?