accéder à une structure [C++] - Page 3
Répondre à la discussion
Page 3 sur 3 PremièrePremière 3
Affichage des résultats 61 à 67 sur 67

accéder à une structure [C++]



  1. #61
    narakphysics

    Re : accéder à une structure [C++]


    ------

    Citation Envoyé par kwariz Voir le message
    OK et ce simulateur a une API publique ? D'ailleurs quel est ce simulateur que tu utilises ?
    The MPLAB® IDE Debug Tool API
    On peut commander le simulateur en utilisant les fonctions fournit par cet API.

    -----

  2. #62
    kwariz

    Re : accéder à une structure [C++]

    Alors je ne suis vraiment pas un pro de l'embarqué du tout ...
    Mais en consultant la doc de ton MPLAB® IDE Debug Tool API, je remarque la fonction DBTGetSymbolAddress
    Citation Envoyé par MPLAB® IDE Debug Tool API
    This function takes the name of a symbol and determines its address, based upon thepassed in PC value. A PC value of zero can be used to find global symbols. If the symbol was not found, MPE_INVALID_SYMBOL is returned in pdwAddress. In order for this function to work, debugging symbols must have been loaded with the COFF or ELF file format.
    Alors je ne sais pas si c'est faisable ni même pertinent, mais si tu compiles ton programme destiné à être simulé en mode debug au format ELF ou COFF, tu pourras non seulement l'injecter dans ton simulateur (la même doc signale que DBTLoadFile permet de charger des programmes aux format hex, ELF et COFF), mais également utiliser une autre bibiothèque (comme libelf, ou libbfd) pour inspecter le code simulé et y trouver les infos de débogages qui pourraient contenir le nom de tes variables globales ainsi que leur type (peut-être, je n'en suis pas certain).
    Mais bon, je m'imagine que ça représente un sacré boulot quand même.

    Par curiosité (ok ok ... c'est un programme c compilé pour un environnement d'exécution linux) j'ai testé sur ma machine :
    Code:
    #include <stdio.h>
    
    int global_int=10;
    char global_string[]="Hello world !";
    double global_double=3.14;
    
    
    
    
    int main()                                                                                                                       
    {                                                                                                                                
      printf("%s\n", global_string);                                                                                                 
      printf("%d\n", global_int);                                                                                                    
      printf("%lf\n", global_double);                                                                                                
                                                                                                                                     
      return 0;                                                                                                                      
    }
    Compilé en mode debug (option -g), l'exécutable est au format ELF (natif linux). J'ai utilisé l'utilitaire readelf (qui lui-même utilise la bibliothèque libelf pour l'introspection) :
    Code:
    $ readelf --debug-dump dbg
    ...
    Contents of the .debug_info section:
    
    
      Compilation Unit @ offset 0x0:
       Length:        0xea (32-bit)
       Version:       2
       Abbrev Offset: 0x0
       Pointer Size:  8
    ...     
     <1><94>: Abbrev Number: 5 (DW_TAG_variable)
        <95>   DW_AT_name        : (indirect string, offset: 0x8e): global_int      
        <99>   DW_AT_decl_file   : 1        
        <9a>   DW_AT_decl_line   : 3        
        <9b>   DW_AT_type        : <0x57>   
        <9f>   DW_AT_external    : 1        
        <a0>   DW_AT_location    : 9 byte block: 3 40 10 60 0 0 0 0 0       (DW_OP_addr: 601040)
    ...
     <1><ba>: Abbrev Number: 5 (DW_TAG_variable)
        <bb>   DW_AT_name        : (indirect string, offset: 0x6d): global_string   
        <bf>   DW_AT_decl_file   : 1        
        <c0>   DW_AT_decl_line   : 4        
        <c1>   DW_AT_type        : <0xaa>   
        <c5>   DW_AT_external    : 1        
        <c6>   DW_AT_location    : 9 byte block: 3 44 10 60 0 0 0 0 0       (DW_OP_addr: 601044)
     <1><d0>: Abbrev Number: 5 (DW_TAG_variable)
        <d1>   DW_AT_name        : (indirect string, offset: 0x0): global_double    
        <d5>   DW_AT_decl_file   : 1        
        <d6>   DW_AT_decl_line   : 5        
        <d7>   DW_AT_type        : <0xe6>   
        <db>   DW_AT_external    : 1        
        <dc>   DW_AT_location    : 9 byte block: 3 58 10 60 0 0 0 0 0       (DW_OP_addr: 601058)
    ...
    On repère les variables globales, après il faudra creuser pour avoir la liste des types décrit par le champs DW_AT_type (en googlant un peu ...), etc ...

    Bon courage

  3. #63
    narakphysics

    Re : accéder à une structure [C++]

    Merci encore une fois
    est ce qu'il y a une version de readelf sous windows?

  4. #64
    kwariz

    Re : accéder à une structure [C++]

    Je ne pourrais que te conseiller de chercher plutôt une version win32 de libelf pour pouvoir intégrer l'introspection à ton propre programme, décoder les infos données par readelf pouvant être plus compliqué que d'accéder directement aux données dans le fichier exécutable simulé ...
    Ensuite si tu googles un peu je suis certain que tu pourras trouver quelques liens aussi bien pour un readelf pour win32, que pour libelf pour windows.

  5. #65
    narakphysics

    Re : accéder à une structure [C++]

    Citation Envoyé par kwariz Voir le message
    Je ne pourrais que te conseiller de chercher plutôt une version win32 de libelf pour pouvoir intégrer l'introspection à ton propre programme, décoder les infos données par readelf pouvant être plus compliqué que d'accéder directement aux données dans le fichier exécutable simulé ...
    Ensuite si tu googles un peu je suis certain que tu pourras trouver quelques liens aussi bien pour un readelf pour win32, que pour libelf pour windows.
    J'ai farfoullé un peu sur le net, les liens de téléchargement de readelf.exe ne fonctionnent plus.
    par contre j'ai téléchargé libelf. mais il faut ajouter les fichiers sources dans mon programme...
    Je vais essayer de télécharger readelf, si non je peux voir elf sous ubuntu. Par ce que j'aimerai bien voir son contenu
    Merci à vous kwariz
    Dernière modification par narakphysics ; 10/04/2013 à 15h29.

  6. #66
    narakphysics

    Re : accéder à une structure [C++]

    Finalement, j'ai réussi à télécharger readelf.exe , voici le lien de téléchargement : http://www.anyfileshere.com/readelf.html
    aprés avoir l'installé, je l'ai déplacé dans le dossier qui contient fichier.elf. ensuite j'ai tapé la commande readelf -a fichier.elf sous MSDOS pour lire son contenu.

  7. #67
    narakphysics

    Re : accéder à une structure [C++]

    Merci à vous tous PASCAL, Jack, DLzlogic et KWariz de vos réponses et le temps que vous m'avez donné.
    A+

Page 3 sur 3 PremièrePremière 3

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/01/2013, 21h07
  2. [Matlab] Accéder à plusieurs éléments d'une structure à 2 niveaux
    Par andrew_77 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 17/01/2013, 12h54
  3. Accéder à l'ENAC àprès une classe prep en france
    Par invite03c13d3b dans le forum Orientation avant le BAC
    Réponses: 0
    Dernier message: 15/04/2012, 16h20
  4. accéder à une prépa ou un IUT sans dossier
    Par invited37efde5 dans le forum Orientation après le BAC
    Réponses: 3
    Dernier message: 17/08/2007, 19h46
  5. Accéder à une fréquence
    Par invite4b7f7fc4 dans le forum Électronique
    Réponses: 6
    Dernier message: 23/06/2006, 17h26