Bonsoir a tous,
Quelqu’un pourrait il me dire s’il est possible d’extraire le fichier programme d’un ATMEGA 168 poir y effectuer une petite modificaton
Si oui quel en serait la procédure.
Un grand merci d’avance pour votre aide
Jimmy
Bonsoir a tous,
Quelqu’un pourrait il me dire s’il est possible d’extraire le fichier programme d’un ATMEGA 168 poir y effectuer une petite modificaton
Si oui quel en serait la procédure.
Un grand merci d’avance pour votre aide
Jimmy
Bonsoir Jimmy
Cette architecture possède une protection contre la lecture du code embarqué. Et les industriels ne sont pas stupides, généralement ils l'activent.
Si cette option (fusible ou fuse en langage technique) n'est pas activée, il est possible de lire le code avec n'importe quel programmateur (ISP ou debugWire) adapté à cette plateforme, de désassembler au moyen de l'outil fournis par Microchip dans la suite de programmation (AVR-GCC), de modifier le code et de reprogrammer la puce. Il faut pour autant pouvoir brancher le programmateur, sur un produit industriel cela peut être très compliqué.
Il faut surtout avoir une très bonne connaissances et pratique de l'architecture et de l'assembleur spécifique. Si on a ces connaissance, on connaît normalement le reste de la réponse. J'ai comme l'impression que cela sera très difficile pour ton niveau.
Bonne suite ou pas.
Delias
Bonsoir à tous
Juste un petit exemple pour montrer la complexité du rétro-engineering.
L'un de mes petits projets en C sur un ATTiny2313.
La partie d'initialisation avant la boucle infinie:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 int main(void) { /* Replace with your application code */ // setting I/O PORTB = 0x5F; PORTD = 0x3F; DDRB = 0x5F; DDRD = 0x3F; for (int i = 0; i < 12; i++) EtatLed[i] = 0; // setting Pin Interrupt for clk analysis PCMSK = _BV(PCINT7); GIMSK = _BV(PCIE); // setting Timer 0 interrupt every 1000 cycle OCR0A = 250; TCCR0A = _BV(WGM01); //mode 2 CTC TCCR0B = 2; //prescaler /8 TIMSK = _BV(OCIE0A); // enable interrupt on CTC // fin initialisation, active les interruptions sei(); while (1)
Et cette partie désassemblée, je me suis aidé du fichier .lss de compilation pour savoir quelques lignes correspondaient. C'est bien évidemment pas possible pour un code lu directement depuis une puce.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 44: 9f e5 ldi r25, 0x5F ; 95 46: 98 bb out 0x18, r25 ; 24 48: 8f e3 ldi r24, 0x3F ; 63 4a: 82 bb out 0x12, r24 ; 18 4c: 97 bb out 0x17, r25 ; 23 4e: 81 bb out 0x11, r24 ; 17 50: 80 e0 ldi r24, 0x00 ; 0 52: 90 e0 ldi r25, 0x00 ; 0 54: fc 01 movw r30, r24 56: e5 58 subi r30, 0x85 ; 133 58: ff 4f sbci r31, 0xFF ; 255 5a: 10 82 st Z, r1 5c: 01 96 adiw r24, 0x01 ; 1 5e: 8c 30 cpi r24, 0x0C ; 12 60: 91 05 cpc r25, r1 62: c1 f7 brne .-16 ; 0x54 64: 80 e8 ldi r24, 0x80 ; 128 66: 80 bd out 0x20, r24 ; 32 68: 80 e2 ldi r24, 0x20 ; 32 6a: 8b bf out 0x3b, r24 ; 59 6c: 8a ef ldi r24, 0xFA ; 250 6e: 86 bf out 0x36, r24 ; 54 70: 82 e0 ldi r24, 0x02 ; 2 72: 80 bf out 0x30, r24 ; 48 74: 83 bf out 0x33, r24 ; 51 76: 81 e0 ldi r24, 0x01 ; 1 78: 89 bf out 0x39, r24 ; 57 7a: 78 94 sei 7c: cc 24 eor r12, r12 7e: c3 94 inc r12 80: d1 2c mov r13, r1
Ce fichier inclus l'adresse de l'instruction, sa valeur en hexa (donc compilée c'est un ou deux word) et son code ASM.
Les valeurs (immédiate, adresse) sont décompilées en hexa dans le code ASM et en décimal en commentaire
Les sauts (absolu ou relatif) sont indiqués en décimal dans le code, et l'adresse pointée est indiquée en hexa dans le commentaire.
Après c'est quelques boîtes d'aspirine pour comprendre ce que le code fait...
Une bonne semaine
Delias
PS: oui les commentaires sont dégueux et oui j'aurais dû activé les optimisations (-O3) quand je vois comment le for a été compilé
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager