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
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).Envoyé par MPLAB® IDE Debug Tool APIThis 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.
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 :
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:#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; }
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 ...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) ...
Bon courage
Merci encore une fois
est ce qu'il y a une version de readelf sous windows?
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.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.
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
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.
Merci à vous tous PASCAL, Jack, DLzlogic et KWariz de vos réponses et le temps que vous m'avez donné.
A+