2011-02-11 2 views
3

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

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

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

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

ответ

0

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

gdb [options] executable-file core-file 

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

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