En cours Arduino - Importer code interne

P

phil135

Compagnon
bonjour,
y a-t-il une possibilité pour relire le logiciel flashé dans un arduino ?

mon imprimante 3d est basée sur une GT2560 (un arduino customisé avec des entrées-sorties pour imprimante 3d) et le doute m'étreint quant à ce que j'ai finallement mis dedans... mais qui fonctionne bien
 
P

phil135

Compagnon
je vois l'idée
mais en fait j'ai un peu touillé le code marlin qui est dans cet arduino, sans trop (du tout) gérer les versions
l'autre solution est l’archéologie du disque dur, avec le risque d'erreur que ça comporte
 
P

petit_lulu

Compagnon
salut,
A défaut de relire le code (le binaire est illisible pour un humain)

lire le binaire c'est pas complique pour un humain, le "decoder" c'est (beaucoup) plus complique.:eek: :-D
ca me rappel ma jeunesse quand je codai des programmes a la main, directement en "code machine" pour un µP 6502 et VIA 6522...:smt021 :hang::smileyvieux:

par contre il existe des desassembleur pour arduino (et d'autre processeurs meme), ca "decode" le binaire du programme mais ca reste encore "imbuvable" car aucun commentaires...
 
P

phil135

Compagnon
hmmm
est-ce que je comprends ou est-ce que je fantasme:

on peut lire le programme en binaire dans l'arduino (comment ?)
puis ensuite de-assembler ce binaire (un nom d'outil ?)

--> ce "code source" est-il alors utilisable dans l'atelier logiciel ? en vue de programmer une carte de rechange notamment (et tant pis pour les commentaires)
 
M

M4vrick

Compagnon
La mémoire de l'arduino (la mémoire dans laquelle est stocké le programme) ne fonctionne qu'en binaire. Donc ce qu'on envoi dans l'arduino est un fichier binaire, ce qu'on appelle un fichier compilé.
Ce qu'on peut relire est identique : un fichier binaire compilé.

Ce fichier peut etre réutilisé sur une autre carte arduino identique tel quel.

Par contre on ne récupère jamais le code source d'origine dans le format "Arduino", au mieux on peut décompiler avec certains outils pour récupérer le code brut. Mais c'est un gros travail ensuite pour pouvoir le mettre en forme et pouvoir le réutiliser ou le modifier.
 
S

speedjf37

Compagnon
ca me rappel ma jeunesse quand je codai des programmes a la main, directement en "code machine" pour un µP 6502 et VIA 6522...:smt021 :hang::smileyvieux:

par contre il existe des desassembleur pour arduino (et d'autre processeurs meme), ca "decode" le binaire du programme mais ca reste encore "imbuvable" car aucun commentaires...

J'ai commencé à programmer en HexaDécimal dur mon 6502 avec des interrrupteurs !!!!!

J'ai professionnellement désassemblé du binaire 6809 pour le modifier (remplacer des afficheurs obsolètes) et reprogrammer des cartes embarquées. (nous avions des sources partielles).

Désassemblé du 68000 pour recoder l'interface 'C' <-> assembleur (les registres dans la pile) pour un nouveau compilateur.

Ce n'est possible que si le binaire n'est pas verrouillé (protégé) comme sur des PIC microchip (fusible pour le code ,eeprom etc).

Sur Arduino il y a aussi des fusibles de protection;

JF
 
S

speedjf37

Compagnon
je vois l'idée
mais en fait j'ai un peu touillé le code marlin qui est dans cet arduino, sans trop (du tout) gérer les versions
l'autre solution est l’archéologie du disque dur, avec le risque d'erreur que ça comporte

si modif dans les options peut se voir dans l'interface (certains menus s'adaptent).
pour les modifs de paramètres idem pour certains

JF
 
P

petit_lulu

Compagnon
@speedjf37, quand on parle d'un operande en adressage indirect indexe X ou en page zero indexe Y, ca fait sourir (ou pleurer) les jeunes de maintenant !!! :eek::smt022
comme quoi, tout fou le camp !!! :smileyvieux:
j'ai commence avec un VIC20, ancetre du C64.

je programmais mes EEPROM avec un ordinateur alice pour ensuite la mettre en ROM dans mes montages, toute une epopee !

aller, c'est l'heure de ma piqure....
 
P

phil135

Compagnon
ok bravo :smt038 ça fait un peu ancien combattant, mais j’admire

mais pour mon pb, je comprends un peu plus haut que je peux "reprendre" le binaire dans la GT2560 et ensuite envoyer ce binaire dans une neuve (?)
habituellement je fait une compilation-flashage "tout en un clic" , mais en fait on peut donner un binaire déjà compilé ?
 
O

Otatiaro

Compagnon
Salut,

Comme expliqué au dessus, si tu veux copier le programme binaire, normalement tu ne devrais pas avoir de problème (je ne connais pas trop les sécurités des AVR, mais très probable que rien ne soit mis en place pour protéger la lecture).

Si par contre l'objectif c'est d'aller voir ce que fait le programme, et éventuellement le modifier, là c'est une autre paire de manches, il va falloir soit se mettre sérieusement à l'assembleur (c'est plus trop à la mode, surtout sur Atmel), soit trouver une programme qui va essayer d'analyser le binaire pour essayer de faire quelque chose qui ressemble au code source original, c'est ce qu'on appelle la décompilation (l'inverse de compiler, qui prend le code source et génère le code binaire).

Si par contre il existe des protections contre la lecture activées sur ton Atmel, c'est mort, pour le relire il faut l'envoyer à une boite très spécialisée qui va ouvrir physiquement le boitier, et inspecter avec un microscope électronique à balayage chaque cellule de flash pour connaitre son état, pour finalement essayer d'en extraire le code binaire, coût de l'opération, quelques milliers d'euros au bas mot.
Et ça n'est possible que si le constructeur n'a pas mis de protection physique (plaque en métal qui recouvre les cellules de flash, etc.).

Et sinon pour le HS de l'assembleur, j'en ai fait il y a longtemps sur PIC16 (mais peut-on parler d'assembleur avec 35 - de mémoire - instructions seulement ?).
Et j'en fais encore aujourd'hui, sur Cortex-M, pour notre RTOS maison qui est maintenant open-source : https://github.com/eznovsas/OpSy
Dès que c'est très spécifique au processeur, ce n'est pas la vocation de C ou C++ de les intégrer, donc ça reste de l'assembleur inline.

Thomas.
 
J

jpbbricole

Compagnon
Bonjour phil135
mon imprimante 3d est basée sur une GT2560
C'est toi qui a téléchargé ce firmware?
Si c'est une imprimante 3D, il y a de fortes chances que ce soit Marlin qui est dans ses entrailles, donc les sources sont disponibles de par là, pas besoin de désassembler le contenu du programme.
Comme préconisé par @speedjf37, connectes ta carte GT2560 au PC, ouvres le moniteur de l'IDE Arduino sur le port COM de la carte, mets la vitesse à 250000 et fait un reset de la carte, tu auras déjà quelques informations, envoies la commande $M503<Enter> pour lister le paramétrage.

Cordialement
jpbbricole
 
S

simon74

Compagnon
Extraire le binaire d'un arduino, en general, est faisable. Apres, pour le decrypter en language facilement lisible par un etre humain, plus difficile.

Premier chose, c'est de disasssembler ce binaire. avr-objdump pourrait etre utile, mais si y a des tables d'addresses, ect, il va te falloir un disassembler plus performant. Une fois que t'as ca, tu vas pouvoir, avec pas mal de temps et effort, trouver les fonctions de libraire - memcpy(), printf(), ect. En scrutant les points d'entree des fonctions, tu pourras decrypter leurs parametres, les donner des noms (aleatoires, bien sur), et doucement decrypter le fonctionallité du logiciel.

Si t'arrive a choper une copie de IDA Pro, ca fait le plupart du "heavy lifting"

Mais en aucun cas tu pourras automatiquement extraire le source de ton programme.
 
P

phil135

Compagnon
je suis réaliste: je vais juste me concentrer sur la transplantation du binaire
remonter à une source Marlin n'est pas indispensable
 
R

RacingMat

Compagnon
ça a fonctionné ton clonage de binaire sur ta nouvelle carte finalement ? :)
 
P

phil135

Compagnon
en fait j'avoue: je suis un peu désordonné à courir derrière une chose et l'autre
 

Sujets similaires

L
Réponses
3
Affichages
603
laurent12100
L
osiver
Réponses
14
Affichages
32 884
osiver
osiver
J
Réponses
265
Affichages
13 848
F
T
Réponses
28
Affichages
2 912
Tristan l'apprenti
T
D
Réponses
103
Affichages
8 119
Doctor_itchy
D
J
Réponses
113
Affichages
23 356
sabeldom
S
Nomadsoul
Réponses
34
Affichages
10 343
speedjf37
S
Haut