Это зависит. На некоторых процессорах, таких как x86_64
, требуются правильные дескрипторы очистки. чтобы GDB правильно разматывал стек. На такой машине анализ дампа памяти с несоответствующей libc, скорее всего, приведет к полному мусору.
Вам не нужны символы отладки для libc, чтобы получить трассировку стека. Вы не получите номера файлов и строк без символов отладки, но вы должны получить правильные имена функций (за исключением случаев, когда имело место встраивание).
Предпосылка вашего вопроса неверна - символы отладки не имеют к этому никакого отношения. «Правильный» способ анализа дампа памяти на C2, когда этот дамп памяти был создан на C1, состоит в том, чтобы иметь копию библиотек C1 (например, /tmp/C1/lib/...
) и указать GDB использовать эту копию вместо установленной на C2 libc
с
(gdb) set solib-absolute-prefix /tmp/C1
команда.
Примечание: приведенная выше настройка должна действовать до того, как вы загрузите ядро в GDB. Этот:
gdb exe core
(gdb) set solib-absolute-prefix /tmp/C1
не будет работать (ядро читается до того, как настройка вступит в силу).
Вот правильный путь:
gdb exe
(gdb) set solib-absolute-prefix /tmp/C1
(gdb) core core
(Я пытался найти ссылку на это в Интернете, но не нашел).
Что такое дескрипторы раскрутки?
Дескрипторы очистки требуются, когда код компилируется без указателей кадров (по умолчанию для x86_64 в оптимизированном режиме). Такой код не сохраняет регистр %rbp, поэтому GDB необходимо сообщить, как "отступить" от текущего кадра к вызывающему кадру (этот процесс также известен как раскручивание стека).
Почему libc.so C1 не включена в ядро?
Основной файл обычно содержит только содержимое доступных для записи сегментов адресного пространства программы. Сегменты только для чтения (где находится исполняемый код и дескрипторы раскрутки) обычно не нужны — вы можете просто прочитать их непосредственно из libc.so на диске.
За исключением того, что это не работает, когда вы анализируете ядро C1 на C2!
Некоторые (но не все) операционные системы позволяют настраивать «полные дампы ядра», когда ОС также будет создавать дамп сопоставлений только для чтения, именно поэтому вы можете анализировать ядро на любой машине.
person
Employed Russian
schedule
03.12.2010