IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Modification programme ATMEGA 168


Sujet :

Embarqué

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2020
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Modification programme ATMEGA 168
    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

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    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

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    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é

Discussions similaires

  1. [AVR] Modification/ programmation attiny13
    Par moijerem dans le forum Embarqué
    Réponses: 211
    Dernier message: 17/06/2016, 16h06
  2. [FB4] Aide modification programme
    Par bensefaj dans le forum Flex
    Réponses: 5
    Dernier message: 18/07/2013, 09h48
  3. empecher modifications programme sas
    Par herkitz dans le forum Administration et Installation
    Réponses: 4
    Dernier message: 23/08/2010, 18h16
  4. Modification programme portCOM
    Par cyriltec dans le forum C#
    Réponses: 1
    Dernier message: 12/03/2010, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo