Question

Est-il possible d'obtenir l'adresse d'un élément au sein d'une structure à partir d'un exécutable ELF et non de compiler pour débogage?

Exemple, compte tenu du code suivant:

typedef struct {
   int tokyo;
   int paris;
   int london;
}cities;

cities  places;

NM et Readelf donnent l'adresse de départ des «lieux» variables, et Readeld donne également la taille:

    Num:    Value  Size Type    Bind   Vis      Ndx Name
1994983: d0003ae8    12 OBJECT  GLOBAL DEFAULT   23 cities

Cependant, ce dont j'ai besoin, c'est de l'adresse de chaque élément de la structure. Donc d'en haut ce que je veux est:

d0003ae8    cities.tokyo
d0003aec    cities.paris
d0003af0    cities.london

Mon seul itinéraire actuellement consiste à compiler avec les informations de débogage DWARF2, à utiliser la lecture (-wliao) pour vider la section .debug_info, puis analyser l'arborescence de type à partir d'un DW_TAG_VARIABLE ajoutant des tailles de base_type. Exemple de lecture:

 <1><e00b>: Abbrev Number: 5 (DW_TAG_structure_type)
     DW_AT_byte_size   : 12
     DW_AT_decl_file   : 3  
     DW_AT_decl_line   : 25 
 <2><e013>: Abbrev Number: 6 (DW_TAG_member)
     DW_AT_name        : tokyo
     DW_AT_decl_file   : 3  
     DW_AT_decl_line   : 15 
     DW_AT_type        : <df04>
 <2><e02e>: Abbrev Number: 6 (DW_TAG_member)
     DW_AT_name        : paris
     DW_AT_decl_file   : 3  
     DW_AT_decl_line   : 16 
     DW_AT_type        : <df04> 
 <2><e02e>: Abbrev Number: 6 (DW_TAG_member)
     DW_AT_name        : london
     DW_AT_decl_file   : 3  
     DW_AT_decl_line   : 16 
     DW_AT_type        : <df04> 

J'ai besoin de trouver un moyen de le faire sans accès au code source, et avec les informations de débogage désactivées.

Toute aide ou pointeurs apprécié.

Merci, Chris

Était-ce utile?

La solution

Non, il n'y a aucun moyen de le faire. ELF seul ne décrit pas les types ou les décalages.

Si vous connaissez les types des champs de la structure et l'ABI de l'architecture pour laquelle l'objet est construit, vous pouvez recréer la disposition.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top