На большинстве архитектур просто невозможно получить хорошие данные из основных файлов без отладочной информации.Даже простые вещи, такие как разматывание стека, не будут работать.Эксперт, знакомый с архитектурой процессора и ABI, сможет определить из этого многое, но это трудоемкий ручной процесс.
В остальном ответ, я полагаю, вы используете GCC,Если вы скомпилируете свой исполняемый файл с оптимизацией и -g
, GCC создаст готовые к работе двоичные файлы с отладочной информацией.Если нет ошибок компилятора (которые встречаются редко), -g
не повлияет на сгенерированный код.Отладочная информация состоит из таблиц данных на стороне (и это вызывает проблемы для отладки, потому что машинный код и исходный код могут очень сильно отличаться в таких аспектах, как порядок выполнения отдельных операторов).
Если выне хотите распространять производственные двоичные файлы с отладочной информацией, вы должны все еще скомпилировать с -g
, но удалите отладочную информацию с помощью strip
перед распространением двоичных файлов, сохраняя при этом несвязанные двоичные файлы для своих собственных записей.При последующем анализе файла ядра вы используете эти несвязанные двоичные файлы, а не разархивированные, которые вы выдавали.Указанные в памяти смещения одинаковы для двоичных и раздетых двоичных файлов, поэтому это работает.
Для более расширенного использования можно также отделить информацию об отладке с помощью таких инструментов, как eu-strip -f
, но этоне кажется необходимым в вашем случае.