Domanda

È possibile ottenere l'indirizzo di un elemento all'interno di una struttura da un eseguibile elfo non compilare per il debug?

Esempio, dato il seguente codice:

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

cities  places;

Sia NM che Readelf forniscono l'indirizzo iniziale dei "luoghi" variabili e Readelf fornisce anche le dimensioni di:

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

Tuttavia ciò di cui ho bisogno è l'indirizzo di ciascun elemento all'interno della struttura. Quindi dall'alto quello che voglio è:

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

Il mio unico percorso al momento è di compilare con le informazioni di debug di Dwarf2, utilizzare Readelf (-wliao) per scaricare la sezione .debug_info, quindi analizzare il tipo di albero da un dw_tag_variable che somma le dimensioni di base_type. Esempio di lettura:

 <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> 

Devo trovare un modo per farlo senza accesso al codice sorgente e con le informazioni di debug disattivate ..

Qualsiasi aiuto o puntatori apprezzati.

Grazie, Chris

È stato utile?

Soluzione

No, non c'è modo di farlo. Solo elfo non descrive tipi o offset.

Se conosci i tipi dei campi della struttura e l'ABI dell'architettura per la quale è costruito l'oggetto, è possibile ricreare il layout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top