Indirizzo dell'elemento all'interno di una struttura da Elf eseguibile
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
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.