Как я могу узнать, какой тип информации об отладке находится в объектном файле ELF?
У меня есть объектный файл ELF. Я хочу знать, какой тип информации для отладки он содержит.
Он был скомпилирован с помощью компилятора Diab (источник C) для архитектуры PPC. Я уверен, что он был построен с помощью отладочных символов.
Я попытался извлечь информацию об отладке с помощью dwarfdump
, но я не работаю, поэтому я думаю, что отладочная информация не относится к типу DWARF.
$ dwarfdump file.elf
No DWARF information present in file.elf
Использование objdump для отображения отладочной информации становится пустым.
$ objdump -g file.elf
file.elf: file format elf32-powerpc
Может ли быть, что этот ELF файл не содержит информации об отладке, даже если в файле ELF есть разделы, называемые .debug_sfnames
, .debug_srcinfo
и .debug.srcinfo
? Или информация об отладке хранится в формате, который objdump
не может обрабатывать?
Ответы
Ответ 1
Вероятно, вы должны использовать nm
Утилита nm должна отображать символическую информацию, отображаемую в объектный файл, исполняемый файл или библиотеку объектов файлов по имени. Если для действительного входного файла отсутствует символическая информация, нм Утилита должна сообщить об этом факте, но не считать его ошибкой состояние.
В качестве альтернативы вы можете использовать такие инструменты, как ldd
, чтобы узнать, какие библиотеки требуются двоичным.
Ответ 2
Кажется, что кто-либо никогда не отвечал на ваш реальный вопрос, а именно: как программно определить вкус символов отладки, присутствующих в данном двоичном файле ELF. Насколько я могу судить, это не указывается явно в ELF; однако это можно определить из-за наличия определенных имен секций в файле ELF. Например: раздел с именем ".debug_info" подразумевает DWARF2 или лучше, тогда как ".stab" подразумевает stabs.
Быстрый поиск по вашим ".debug_sfnames" предлагает DWARF1. (Я не знаю, почему ваш "dwarfdump" не определил, что... возможно, ваш dwarfdump предназначен для более новых DWARF и сбрасывал обратную совместимость?)
Ответ 3
В GNU/Linux:
$ readelf --debug-dump=info /absolute/path/to/file | grep "Version" | uniq
Возвращает версию символов DWARF, используемую в двоичном формате.