2010-08-23 4 views
2

Я использую gdb и libbfd для извлечения информации глобальных переменных из файла elf и ее отображения. Я могу получить следующие данные из имени libbfd: Global Variable, адреса и размера. Я извлекаю тип переменных и его детей, используя gdb и gdb \ MI (ptype, whatis, -var-create & -var-list-children).gdb bfd: получить дочерний переменный адрес или размер или смещение

Как я могу получить адрес \ размер \ смещение от родителя всех детей?

например

type = struct {\n" 
    unsigned char count;\n" 
    unsigned char time;\n 
    }\n 

Если переменная А этого типа по адресу 0x000100, я хочу показать, что A.count в 0x000100 с размером 0x1 и A.time в 0x000101 с размером 0x1.

EDIT: Я читал, что gdb может читать информацию DWARF, но я не могу понять, как я могу получить эту информацию из gdb.

ответ

3

Вот что я сделал в конце концов. Чтобы получить размер, я использовал:

p sizeof(A.time) 

и получить адрес я использовал:

p /a &A.time 

ПРИМЕЧАНИЕ: Это относится только к переменной размером больше, то 1 байт. Чтобы иметь возможность получить битподы размером и смещением в битах, мне пришлось перекомпилировать GDB в соответствии с предложением, предлагаемым в nabble: Address of bitfield element bug?

 Смежные вопросы

  • Нет связанных вопросов^_^