Ответ 1
Погрузчик ELF загружает сегменты, а не секции; отображение из секций в сегменты определяется компоновщиком script, используемым для создания исполняемого файла.
Компонент компоновки по умолчанию script не отображает разделы отладки в любом сегменте, поэтому это опущено.
Информация о символах поставляется в двух вариантах: статические символы обрабатываются вне диапазона и никогда не хранятся в виде данных раздела; таблицы динамических символов генерируются компоновщиком и добавляются в специальный сегмент, который загружается вместе с исполняемым файлом, так как он должен быть доступен динамическому компоновщику. Команда strip
удаляет только статические символы, которые никогда не упоминаются в сегменте.
Таким образом, вы можете использовать полную отладочную информацию через весь процесс, и это не повлияет на размер исполняемого образа в ОЗУ, так как он не загружен. Это также означает, что информация не включена в основные дампы, поэтому это также не дает вам никакой пользы.
У утилиты objcopy
есть специальная опция для копирования только отладочной информации, поэтому вы можете создать второй файл ELF, содержащий эту информацию, и использовать разделенные двоичные файлы; при анализе дампа ядра вы можете загрузить оба файла в отладчик:
objcopy --only-keep-debug myprogram myprogram.debug
strip myprogram