Comprendre du code super H : rétro ingénierie

Signaler
Messages postés
63
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
27 mai 2020
-
Messages postés
177
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
12 mai 2020
-
Bonjour,

J'ai un code auquel je ne comprends pas grands chose je crois que c'est du super H.

J'aimerais savoir comment pouvoir le lire en langage compressible.

Lien MEGA du code : https://mega.nz/#!r75RCBJB!ZL15znFHt_zvtmlpDJLBtDT1a3irSewZkeHFLMsb5nE

Merci de votre aide.

7 réponses

Messages postés
177
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
12 mai 2020
5
Salut benji05,

En l'état, impossible de te donner des informations sur ton code Super H, car il semble que tu sois tombé sur les sources du programme de compilation/ROM codées en assembleur pour processeur motorola 68000.

Il te faut donc assembler le programme pour l'utiliser…
Mais en aucun cas, il s'agit d'un programme ou script en SuperH ou du H, qui se rapproche du Cobol (languages scriptés).

Le document est un programme désassemblé qui doit être remis en forme pour être réassemblé en fichier/image ROM.
000000 df1e mov.l  @(h'78,pc), r15     ;@(h'7c)
000002 d41f mov.l  @(h'7c,pc), r4     ;@(h'80)
000004 440e ldc  r4, sr
000006 d11f mov.l  @(h'7c,pc), r1     ;@(h'84)
000008 e500 mov  #h'0, r5
00000a d41f mov.l  @(h'7c,pc), r4     ;@(h'88)
00000c e710 mov  #h'10, r7
00000e d21f mov.l  @(h'7c,pc), r2     ;@(h'8c)
000010 4718 shll8  r7
000012 de1f mov.l  @(h'7c,pc), r14     ;@(h'90)
000014 e6ff mov  #h'ffffffff, r6
000016 2122 mov.l  r2, @r1
000018 2452 mov.l  r5, @r4
00001a e508 mov  #h'8, r5
00001c 1474 mov.l  r7, @(h'10,r4)
00001e e7a0 mov  #h'ffffffa0, r7
000020 4718 shll8  r7
000022 1466 mov.l  r6, @(h'18,r4)
000024 4728 shll16  r7
000026 4518 shll8  r5
000028 1e53 mov.l  r5, @(h'c,r14)
00002a 07e3 
00002c e104 mov  #h'4, r1
00002e d319 mov.l  @(h'64,pc), r3     ;@(h'94


Pour le compiler, deux manière… prendre un assembleur.
Ou la façon le plus simple, reprendre tous les codes de la deuxième colonne et de les ajouter les uns aux autres.

C'est d'ailleurs le mieux à faire, car certains oppcodes ne correspondent pas aux codes machine donnés. (00:09<>Nop mais Nop+09:xx...)

Donc, une fois le fichier binaire reconstruit, il pourra être lancé sur émulateur, mais il faut savoir pour quelle machine il a été réalisé… MPF, Apple2 (etc.), apparemment en 8bits vu les oppcodes utilisés.

Donc… non, ce n'est pas du H, mais le logiciel de compilation codé en assembleur Motorola.

Il est a remarquer qu'il existe autant de façons de représenter un code assembleur que de logiciels assembleurs.

La seule constante reste les codes 8bits et les oppcodes constructeurs pour tel ou tel processeur. Mais, aucune doctrine de compilation dans les scripts n'a été normalisée à l'époque.

Ce qui implique que chaque compilateur ou décompilateur ASM utilisait sa propre syntaxe et types de d'annotations plus ou moins compatibles les uns aux autres.
Messages postés
177
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
12 mai 2020
5
Salut,
Le lien MEGA est corrompu.
Mais, tu as un début d'explication sur le language H...

Ici: https://academic.oup.com/comjnl/article-pdf/5/3/158/1172721/5-3-158.pdf
Messages postés
63
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
27 mai 2020

Non le lien MEGA n'est pas corrompu !
Merci pour le lien du super H
Messages postés
63
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
27 mai 2020

Messages postés
63
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
27 mai 2020

merci de ta réponse très complète.
cependant j'ai pas tout a fait compris en prenant tout les lignes de la deuxième colonnes on obtiendrait le code.
mais après comment le rendre lisible.
Je me dit que ceux qui ont créer ce code il l'ont pas écrit comme cela ?
il ont du l’écrire dans un langage c+ ou autre basic et plus courant.
c'est cela a quoi je veux arriver
pour info ce n'est pas du Motorola mais un processeur CH4 qui a était créer par Renesas.
Encore une fois merci de ta réponse extrêmement complète.
Messages postés
177
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
12 mai 2020
5
Salut Benji,

J'ai trouvé cela: http://resource.renesas.com/lib/eng/e_learnig/superh_e_learning/24/list.html
Donc, pas grand chose car beaucoup de chose semble perdu.

...toutes les lignes de la deuxième colonnes on obtiendrait le code binaire d'execution du programme compilé.

Nous ne somme pas sur un script interprété mais de l'assembleur brut.
On peut effectivement compiler ce type d'assembleur avec un script C ou Basic, mais ici il n'est pas décompilé en un langage structuré.
C'est l'équivalent des blocs "o" en langage C qui servent de bibliothèques de fonction en ASM pur.

Pour le rendre lisible il te faut le décompiler en identifier les blocs "fonction" (boucles, appels de périphériques…) … mais il te faut le compilateur pour effectuer cette tâche.

Donc, en l'état, tu n'as pas le bon listing pour comprendre les subtilité de ce programme.
Enfin, ce sera aussi difficile de comprendre un programme C compilé, passé au désassembleur pour le lister en language machine.

Pour le moment, il ne te reste que le recours à la datasheet du processeur pour avoir un aperçu plutôt abstrait du code récupéré.
Messages postés
63
Date d'inscription
mercredi 17 avril 2019
Statut
Membre
Dernière intervention
27 mai 2020

vraiment merci beaucoup pour tes réponses aussi bien (géniale le lien sa m'aide beaucoup).
Mais je craint de ne pas êtres a la hauteur de comprendre tous ce que tu m'a dit
Juste le document texte que je t'ai fournis c'est le desassemblement de l'Os initiale.
Merci
Messages postés
177
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
12 mai 2020
5
Salut Benji,
Oui, comprendre le langage machine est une discipline qui demande la connaissance du fonctionnement interne d'un processeur ou d'un microcontrôleur.
Ce language est synthétique et non intuitif. C'est pour cela que l'on a recours à des langages structures comme le C ou le Basic pour générer de tels codes.
Il va sans dire que désassembler un bloc memoire ou un programme consiste à "traduire" l'ensemble des codes binaires en instructions machine, alors qu'en réalité ces codes peuvent être du texte, des datas ou des buffers variables.
Il n'est donc pas rare de se retrouver avec des opcodes incohérents dus à une traduction décalée ou à une interprétation de chaînes de caractères ou variables en codes d'execution!
Il faut donc bien préparer le désassemblage et connaitre les incohérences de fonctionnements au niveau des registres, des I/O matériel et des adresses.
Cela peut parfois ce faire facilement, si le code a été structuré dans un schéma connu… Header, codes et variables… mais, dans certains cas, l'assemblage a été fait de manière direct (pour gagner en rapidité) et non avec un compilateur C... Ce qui rend la discipline beaucoup plus ardue.

Donc, ton exemple donne une vue d'ensemble non representative d'un code, car le désassemblage n'a pas été préparé en créant des blocs, en isolant le texte et les Datas (son-image-tables d'adresses).

Résultat, certaines parties du code sont cohérentes et d'autres la traduction de valeurs incompréhensibles par le processeur.
Amuse-toi bien.