gdb \ bfd: получить адрес, размер или смещение дочерней переменной - PullRequest
2 голосов
/ 23 августа 2010

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

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

* 1005 например *

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

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

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

1 Ответ

3 голосов
/ 29 августа 2010

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

p sizeof(A.time)

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

p /a &A.time

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

...