Как анализировать и отлаживать ядро ​​GDB без символов, используя регистры и необработанный стек - PullRequest
3 голосов
/ 11 февраля 2011

На месте клиента произошел сбой стороннего программного обеспечения.Процесс и библиотеки удалены (без символов), стек вызовов не дает никакой полезной информации.Все, что у меня есть, это регистры, которые не могут быть повреждены.Этот сторонний код был написан на C.

Теперь я до сих пор использовал gdb для отладки более простых проблем.Но этот немного сложнее.Я думаю, что регистр и необработанная информация стека могут быть использованы для определения того, где произошел сбой, и мне нужна помощь по этому аспекту.

Возможно, не удастся развернуть двоичный двоичный файл без разметки на сайте клиента, равно как и не будетВозможно сделать домашнее воспроизведение аварии.Кроме того, я не знаком с этим сторонним кодом.

Также мне требуются указатели / сайты / документы для:
1) ELF и различных заголовков разделов.
2) Как создатьфайл символов (во время компиляции) для библиотеки и процесса.
3) Как указать GDB читать символы из файла символов.

1 Ответ

0 голосов
/ 03 декабря 2011

Одна вещь, которую мы должны быть в состоянии сделать, это открыть ваш основной файл для версии вашего процесса без разделов / с символами.Пока процесс компиляции (компилятор, флаги оптимизации и т. Д.) Одинаков и вы просто сохраняете всю эту отладочную информацию, GDB должна быть в состоянии предоставить вам всю информацию, которую вы можете ожидать от ядра.

gdb [options] executable-file core-file

Чтобы скомпилировать ваш процесс с отладочной информацией (символы и карлики для линий, типов, ...), вам нужно добавить -g в флаги вашего компилятора.То же самое относится и к вашим пользовательским библиотекам.

Для системных библиотек иногда (не всегда) это может быть убедительным, современные дистрибутивы Linux (по крайней мере, Fedora) напрямую предоставляют их для gdb.

...