Возможно ли получить адрес элемента внутри структуры из исполняемого файла ELF, а не компилировать его для отладки?Адрес элемента внутри структуры от исполняемого эльфа
Пример, учитывая следующий код:
typedef struct {
int tokyo;
int paris;
int london;
}cities;
cities places;
Оба нм и readelf дают начальный адрес переменной 'места', и readelf также дает SizeOf:
Num: Value Size Type Bind Vis Ndx Name
1994983: d0003ae8 12 OBJECT GLOBAL DEFAULT 23 cities
Однако то, что я требуется адрес каждого элемента внутри структуры. Так сверху, что я хочу это:
d0003ae8 cities.tokyo
d0003aec cities.paris
d0003af0 cities.london
Мой единственный путь в настоящее время является для компиляции с dwarf2 отладочной информации, используйте readelf (-wliao), чтобы разгружать секцию .debug_info, а затем разобрать дерево типа из DW_TAG_variable добавляет размеры base_type. Пример readelf:
<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>
мне нужно найти способ сделать это без доступа к исходному коду, и отладочная информация выключена ..
Любая помощь или указатели оценили.
Спасибо, Chris
Только обработав файл elf, gdb может предоставить эту информацию. Как это делает gdb? Можно получить элементы типа, структуры, адреса и т. Д. –
gdb считывает информацию об отладке, которая хранится в файле ELF. Но вопрос заключался в том, чтобы делать это без отладочной информации. –