#gdb #elf
#gdb #elf
Вопрос:
Таблица ELF symtab сообщает, что моя переменная имеет размер 16. В частности, после запуска readelf -s mybinary я вижу следующий вывод:
Num: Value Size Type Bind Vis Ndx Name
83: 0804a718 16 OBJECT LOCAL DEFAULT 25 myVar
Однако, когда я открываю GDB для проверки размера myVar, я вижу следующий вывод:
print sizeof(myVar)
$1 = 4
Я не уверен, откуда возникает это несоответствие. Для некоторого фона я использую x86-32, и у меня нет доступа к исходному файлу, поэтому я не знаю фактического типа myVar.
Комментарии:
1. Выяснение того, о чем знает GDB
myVar
, должно быть вашим первым шагом. Что делатьwhatis myVar
иptype myVar
говорить?2. Я уже пробовал это. Ни один из них не дает никакой дополнительной информации:
<data variable, no debug info>
Ответ №1:
У вас должна быть старая версия GDB (старше 8.1).
Из файла новостей GDB:
*** Changes in GDB 8.1
...
GDB no longer assumes functions with no debug information return
'int'.
...
Similarly, GDB no longer assumes that global variables with no debug
info have type 'int', and refuses to print the variable's value
unless you tell it the variable's type:
(gdb) p var
'var' has unknown type; cast it to its declared type
(gdb) p (float) var
$3 = 3.14
Как говорится в тексте, до 8.1 GDB обрабатывала любую переменную без отладочной информации как имеющую int
тип и sizeof(int)
равную 4 в вашей системе.
В онлайн-версии НОВОСТИ текст немного отличается:
GDB no longer makes assumptions about the type of symbols without
debugging information to avoid producing erroneous and often confusing results;
PS
Я уже пробовал это. Ни один из них не дает никакой дополнительной информации
Задавая вопрос, это помогает предоставить всю необходимую информацию и указать, что вы уже пробовали.
Указание версии GDB, которую вы используете, также помогло бы.