objdump отображает информацию, которая содержится в объектных файлах.
Краткое резюме по опциям objdump:
[-a|--archive-headers] [-b bfdname|--target=bfdname] [-C|--demangle[=style]] [-d|--disassemble[=symbol]] [-D|--disassemble-all] [-z|--disassemble-zeroes] [-EB|-EL|--endian={big | little }] [-f|--file-headers] [-F|--file-offsets] [--file-start-context] [-g|--debugging] [-e|--debugging-tags] [-h|--section-headers|--headers] [-i|--info] [-j section|--section=section] [-l|--line-numbers] [-S|--source] [--source-comment[=text]] [-m machine|--architecture=machine] [-M options|--disassembler-options=options] [-p|--private-headers] [-P options|--private=options] [-r|--reloc] [-R|--dynamic-reloc] [-s|--full-contents] [-W[lLiaprmfFsoORtUuTgAck]| --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str, =str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr, =cu_index,=links]] [-WK|--dwarf=follow-links] [-WN|--dwarf=no-follow-links] [-wD|--dwarf=use-debuginfod] [-wE|--dwarf=do-not-use-debuginfod] [-L|--process-links] [--ctf=section] [-G|--stabs] [-t|--syms] [-T|--dynamic-syms] [-x|--all-headers] [-w|--wide] [--start-address=address] [--stop-address=address] [--no-addresses] [--prefix-addresses] [--[no-]show-raw-insn] [--adjust-vma=offset] [--dwarf-depth=n] [--dwarf-start=n] [--ctf-parent=section] [--no-recurse-limit|--recurse-limit] [--special-syms] [--prefix=prefix] [--prefix-strip=level] [--insn-width=width] [--visualize-jumps[=color|=extended-color|=off] [--disassembler-color=[color|extended-color|off] [-U method] [--unicode=method] [-V|--version] [-H|--help] objfile...
Утилита objdump (arm-none-eabi-objdump) отобразит информацию одного или нескольких объектных файлов кода. Опции objdump управляют тем, что именно покажет утилита. Выводимая информация обычно помогает тем программистам, которые разрабатывают инструментарий компиляции или хакерам, декомпилирующим двоичный код.
objfile... это объектные файлы, которые будут обработаны. Когда вы указываете архивы объектных файлов (библиотеки *.a), objdump покажет информацию по каждому объектному файлу, входящему в библиотеку.
[Опции]
По традиции реализованы короткая и длинная форма многих опций. Должен быть задан хотя бы один из вариантов опций из списка -a, -d, -D, -e, -f, -g, -G, -h, -H, -p, -P, -r, -R, -s, -S, -t, -T, -V, -x.
-a --archive-header
Если любой из файлов objfile это архив, то будет отображена информация из заголовка архива (в формате, подобном ls -l). Помимо информации, которую вы можете получить вызовом ar tv, вызов objdump -a покажет формат объектного файла для каждого элемента архива.
--adjust-vma=offset
При отображении информации, сначала добавляется смещение ко всем адресам секций. Это полезно, если адреса секции не соответствуют таблице символов, что может произойти, когда секции помещаются по определенным адресам, с использованием формата, который может не содержать адреса секции, такого как a.out.
-b bfdname --target=bfdname
Указывает, что в объектных файлах используется формат объектного кода bfdname. Эту опцию часто указывать необязательно, потому что objdump может автоматически распознать многие форматы. Например:
objdump -b oasys -m vax -h fu.o
.. отобразит информацию из заголовков секции (-h) объектного файла fu.o, которая явно идентифицирована (-m) как объектный файл VAX в формате, генерируемом компиляторами Oasys. Вы можете перечислить поддерживаемые форматы с помощью опции -i.
-C --demangle[=style]
Декодирование (demangle, см. Википедию [2]) автоматически сгенерированных компилятором имен символов в имена, которые использовались программистом. Кроме удаления префиксных нижних подчеркиваний, это делает имена функций C++ более удобочитаемыми. У разных компиляторов преобразование имен (mangling styles) может быть реализовано по-разному. Опциональный аргумент для указания стиля деманглинга может использоваться для выбора подходящего стиля маскирования имен, который использовался компилятором.
--recurse-limit --no-recurse-limit --recursion-limit --no-recursion-limit
Разрешает или запрещает лимит объема рекурсии, который применяется при деманглинге строк. Поскольку форматы преобразования имен компилятором (mangling [2]) позволяют бесконечную рекурсию для манглинга имен, то возможны ситуации, что будут созданы слишком большие строки при деманглинге, что приведет к переполнению стека на машине хоста. Указание лимита может предотвратить такую ситуацию путем ограничения рекурсии 2048 уровнями вложенности. По умолчанию этот предел включен, но может потребоваться его отключение, чтобы выполнить деманглинг по-настоящему сложных имен. Но следует иметь в виду, что при отключении лимита рекурсии возможно исчерпание стека, и любые баг-репорты о таком событии будут отклонены.
-g --debugging
Отобразит информацию отладки. Делается попытка парсинга формата отладки STABS, сохраненного в файле, и вывод его с помощью синтаксиса языка C. Если не было найдено информации STABS debugging, то эта опция приведет к откату к опции -W для печати любой DWARF-информации в файле.
-e --debugging-tags
Работает наподобие -g, но генерируется информация в формате, совместимом с утилитой ctags.
-d --disassemble --disassemble=symbol
Отобразит мнемоники ассемблера для машинных инструкций из входного файла. Эта опция дизассемблирует только те секции, в которых ожидается наличие инструкций. Если предоставлен опциональный аргумент symbol, то отобразятся ассемблерные мнемоники, начинающиеся с symbol. Если symbol это имя функции, то дизассемблирование остановится в конце функции, инеаче остановится, когда встретится следующий символ. Если не было совпадения для symbol, то ничего не отобразится. Имейте в виду, что если разрешена опция --dwarf=follow-links, то любые таблицы символов в связанных файлах отладочной информации будут прочитаны и использованы при дизассемблировании.
-D --disassemble-all
Работает наподобие -d, но дизассемблируется содержимое всех секций, а не только тех, в которых ожидается наличие инструкций. Опция --disassemble-all (-D) также оказывает незначительное влияние на дизассемблирование инструкций в секциях кода. Когда использована опция -d, то objdump будет подразумевать, что любые символы, присутствующие в секции кода, соответствуют границе между инструкциями, и это запрещает дизассемблирование на пересечении этой границы. Когда указана опция -D, то это подавляет такое подразумевание. Поэтому возможны различия в результатах вывода -d и -D, например для случаев, когда в секциях кода хранятся какие-нибудь данные.
Если target это архитектура ARM, то эта опция также приводит к тому, что дизассемблер декодирует порции данных, найденных в секциях кода, как если бы это были инструкции.
Обратите внимание, что если опция разрешена опция --dwarf=follow-links, то любая таблица символов, присоединенная в файлах отладочной информации, будет прочитана и использована при дизассемблировании.
--no-addresses
При дизассемблировании не будут печататься адреса для каждой строки или для символов и смещений для перемещения кода (relocation offsets). Совместно с --no-show-raw-insn это может быть полезно для сравнения результатов вывода компилятора.
--prefix-addresses
При дизассемблировании на каждой строке печатается полный адрес. Это более старый формат дизассемблирования.
-EB -EL --endian={big|little}
Указывает порядок старшинства байт (endianness) объектных файлов. Это влияет только на дизассемблирование, что полезно при дизассемблировании формата файла, который не указывает информацию endianness information, такого как S-records.
-f --file-headers
Отобразит суммарную информацию из общего заголовка каждого объектного файла.
-F --file-offsets
При дизассемблировании секций с каждым отображаемым символом также отображается смещение области данных файла. Если нули пропускаются, то при возобновлении дизассемблирования пользователю сообщается, сколько нулей было пропущено, и указывается смещение в файле места, в котором дизассемблирование было возобновлено. При дампе секций отображается смещение в файле, откуда начался дамп.
--file-start-context
Указывает, что при отображении промежуточного исходного кода / дизассемблера (подразумевается -S) из файла, который еще не отображен, расширить контекст до начала файла.
-h --section-headers --headers
Отобразит общую информацию из заголовков секции объектного файла. Сегменты файла могут быть перемещены на нестандартные адреса, например при использовании для ld опций -Ttext, -Tdata или -Tbss. Однако некоторые форматы объектных файлов, такие как a.out, не сохраняют начальные адреса сегментов файла. В этих ситуациях, хотя ld корректно перемещает секции, использование objdump -h для перечисления заголовков секций файла не сможет показать корректные адреса. Вместо этого будут показаны обычные адреса, неявные для target.
Обратите внимание, что в некоторых случаях такое может быть возможно для секции, у которой одновременно установлены атрибуты READONLY и NOREAD. Тогда атрибут NOREAD имеет преимущество, но objdump сообщит об обоих атрибутах, потому что может быть важной полная информация установки бит флагов.
-H --help
Вывод общей информации по опциям и выход.
-i --info
Отобразит список всех архитектур и объектных форматов, доступных для спецификации с -b или -m.
-j name --section=name
Отобразит информацию только для имени секции.
-L --process-links
Отобразит содержимое non-debug секций в отдельных файлах отладочной информации, которые связаны с основным файлом. Эта опция автоматически подразумевает опцию -WK, и будут отображены только секции, запрошенные другими опциями командной строки.
-l --line-numbers
Пометит отображение (используя отладочную информацию) именем файла из номерами строк исходного кода, соответствуюищие объектому коду или релокациям. Полезно только вместе с -d, -D или -r.
-m machine --architecture=machine
Указывает архитектуру, используемую при дизассемблировании объектных файлов. Это может быть полезным, когда дизассемблируемые объектные файлы не предоставляют информацию об архитектуре, такие как S-records. Опцией -i можно просмотреть список поддерживаемых архитектур. Если target это архитектура ARM, то этот ключ дает дополнительный эффект. Он ограничивает дизассемблирование только теми инструкциями, которые поддерживаются архитектурой, указанной значением machine. Если необходимо использовать этот ключ, потому что входной файл не содержит никакой информации по архитектуре, но желательно дизассемблировать все инструкции, то используйте -marm.
-M options --disassembler-options=options
Передает дизассемблеру специальную информацию. Опция поддерживается только некоторыми target. Если нужно указать больше одной опции для дизассемблера, то можно использовать либо несколько опций -M, либо перечислить опции дизассемблера в виде списка с разделителем запятой. Для ARC опция dsp управляет печатью DSP-инструкций, spfp выбирает печать инструкций плавающей точки одинарной точности (FPX single precision FP instructions), dpfp выбирает печать FPX-инструкций плавающей точки двойной точности (FPX double precision FP instructions), quarkse_em выбирает печать специальных инструкций QuarkSE-EM, fpuda выберет печать вспомогательных инструкций двойной точности (double precision assist instructions), fpus выберет печать FPU-инструкций плавающей точки одинарной точности (FPU single precision FP instructions), fpud выберет печать FPU-инструкций плавающей точки двойной точности (FPU double precision FP instructions). Дополнительно с помощью hex может быть выбрана печать непосредственных значений (шестнадцатеричном формате) в шестнадцатеричном формате. По умолчанию значения short immediate печатаются в десятичном представлении, в то время как long immediate значения печатаются в шестнадцатеричном формате.
cpu=... позволяет применять конкретный ISA при дизассемблировании инструкций, переопределяя значение -m или чего-либо, указанного в файле ELF. Может быть полезным выбрать архитектуру ARC как EM или HS ISA, потому что архитектура для них одинаковая, и дизассемблер полагается на определенные данные заголовка ELF чтобы определить, какой код: для EM или HS. Эта опция может быть указана несколько раз, тогда будет использовано только последнее значение. Допустимые значения те же, что и для опции ассемблера -mcpu=...
Если target это архитектура ARM, то этот ключ может использоваться для выбора, какой набор имен регистров будет использоваться дизассемблером. Указание -M reg-names-std (умолчание) выберет имена регистров, используемые в документации по набору инструкций ARM, но с регистром 13 под именем 'sp', регистром 14 под именем 'lr' и регистром 15 под именем 'pc'. Указание -M reg-names-apcs выберет имена, используемые в ARM Procedure Call Standard, в то время как -M reg-names-raw будет просто использовать букву r, следом за которой идет номер регистра.
Также существует 2 варианта схем именования регистров APCS, разрешаемые -M reg-names-atpcs и -M reg-names-special-atpcs, которые используют соглашения именования ARM/Thumb Procedure Call Standard (либо с нормальными именами регистров, либо со специальными именами регистров).
Эта опция также может использоваться для ARM-архитектур, чтобы заставить дизассемблер интерпретировать все инструкции как Thumb-инструкции с использованием --disassembler-options=force-thumb. Это может быть полезно, когда делаются попытки дизассемблировать thumb-код, сгенерированный другими компиляторами.
Для AArch64 target этот ключ может использоваться для установки, должны ли быть инструкции дизассемблированы как наиболее общие инструкции с использованием опции -M no-aliases, или должны ли быть примечания к командам генерироваться как комментарии в дизассемблировании с использованием -M notes.
Для x86 некоторые из этих опций дублируют функции ключа -m, но позволяют реализовать более тонкое управление.
"x86-64" "i386" "i8086"
Выберет дизассемблирование для указанной архитектуры.
"intel" "att"
Выбирает между режимами синтаксиса Intel и AT&T.
"amd64" "intel64"
Выбирает между AMD64 ISA и Intel64 ISA.
"intel-mnemonic" "att-mnemonic"
Выбирает между режимом мнемоники Intel и режимом мнемоники AT&T. Примечание: "intel-mnemonic" подразумевает "intel" и "att-mnemonic" подразумевает "att".
"addr64" "addr32" "addr16" "data32" "data16"
Указывает размер по умолчанию для адреса и операнда. Эти 5 опций будут отменены, если позже в строке опций появляются "x86-64", "i386" или "i8086".
"suffix"
Когда используется режим синтаксиса AT&T, а также для ограниченного набора инструкций в режиме Intel, указывает дизассемблеру печатать суффикс мнемоники даже когда suffix может пересекаться с операндами, или, для определенных инструкций, с умолчаниями режима выполнения.
Для PowerPC аргумент raw для -M выбирает дизассемблирование аппаратных инструкций вместо псевдонимов (aliases). Например, вы увидите "rlwinm" вместо "clrlwi", и "addi" вместо "li". Все аргументы -m для gas, которые выбирают поддерживаемый CPU: 403, 405, 440, 464, 476, 601, 603, 604, 620, 7400, 7410, 7450, 7455, 750cl, 821, 850, 860, a2, booke, booke32, cell, com, e200z4, e300, e500, e500mc, e500mc64, e500x2, e5500, e6500, efs, power4, power5, power6, power7, power8, power9, power10, ppc, ppc32, ppc64, ppc64bridge, ppcps, pwr, pwr2, pwr4, pwr5, pwr5x, pwr6, pwr7, pwr8, pwr9, pwr10, pwrx, titan и vle. 32 и 64 модифицируют умолчание или предварительный выбор CPU запрещая или разрешая 64-битные инструкции соответственно. В дополнение altivec, any, htm, vsx и spe добавляют возможности предыдущего или последующего выбора CPU. Указание any будет дизассемблировать любой код операции, известный для binutils, но в случаях, когда у кода операции есть две разные интерпретации или разные аргументы, вы можете получить результат дизассемблера не тот, что ожидали. Если вы дизассемблируете без выбора CPU, то будет выбрано умолчание на основе BFD из заголовков объектных файлов, однако результат опять будет не тот, который вы ожидаете.
Для MIPS эта опция управляет печатью имен мнемоник инструкций и имен регистров в дизассемблированных инструкциях. Несколько выбранных следующих вариантов могут быть указаны как строка с разделителем-запятой, при этом недопустимые опции игнорируются:
"no-aliases"
Печатает сырые (raw) мнемоники инструкций вместо некоторых мнемоник псевдоинструкций. Например, напечатается 'daddu' или 'or' вместо 'move', 'sll' вместо 'nop', и т. д.
"msa"
Дизассемблирует инструкции MSA.
"virt"
Дизассемблирует инструкции виртуализации ASE.
"xpa"
Дизассемблирует инструкции расширенного физического адреса eXtended Physical Address (XPA) ASE.
"gpr-names=ABI"
Напечатает имена GPR (general-purpose register), подходящие для указанного ABI. По умолчанию выбраны имена GPR в соответствии с ABI дизассемблируемого двоичного кода.
"fpr-names=ABI"
Печатает имена FPR (floating-point register), подходящие для указанного ABI. По умолчанию вместо имен печатаются номера FPR.
"cp0-names=ARCH"
Печатает имена регистров CP0 (system control coprocessor; coprocessor 0) в соответствии с CPU или архитектурой, указанной ARCH. По умолчанию имена регистров CP0 выбраны в соответствии с архитектурой и CPU дизассемблируемого двоичного кода.
"hwr-names=ARCH"
Печатает имена HWR (hardware register, используется инструкцией "rdhwr") в соответствии с CPU или архитектурой, указанной ARCH. По умолчанию имена HWR выбираются в соответствии с архитектурой и CPU дизассемблируемого двоичного кода.
"reg-names=ABI"
Печатает имена GPR и FPR в соответствии с выбранным ABI.
"reg-names=ARCH"
Печатает имена регистров, специфичных для CPU (имена регистра CP0 и HWR) в соответствии с CPU или архитектурой, указанной ARCH.
Для любой из перечисленных выше опций ABI или ARCH могут быть указаны как числа, чтобы для выбранных типов регистров вместо имен печатались номера. Вы можете перечислить доступные значения ABI и ARCH, используя опцию --help.
Для VAX вы можете указать адреса входа в функции (function entry) с помощью -M entry:0xf00ba. Вы можете использовать это несколько раз, чтобы правильно дизассемблировать двоичные файлы VAX, в которых нет таблиц символов (файлы наподобие дампов ROM). В этих случаях маска function entry декодировалась бы как инструкции VAX, что вероятно привело бы к неправильному дизассемблированию остального кода функции.
-p --private-headers
Печатает информацию, специфичную для формата объектного файла. Полная информация зависит от формата объектного файла, и для некоторых форматов дополнительная информация выведена не будет.
-P options --private=options
Печатает информацию, специфичную для формата объектного файла. Аргумент options это список с разделителем запятой, который зависит от формата (список опций приведен в документации).
Для XCOFF доступны опции:
"header" "aout" "sections" "syms" "relocs" "lineno, " "loader" "except" "typchk" "traceback" "toc" "ldinfo"
Эту опцию поддерживают не все форматы объектных файлов. В частности, формат ELF её не поддерживает.
-r --reloc
Печатает элементы перемещения кода (relocation entries) файла. Если используются опции -d или -D, то элементы перемещения печатаются вперемежку с дизассемблированием.
-R --dynamic-reloc
Печатает элементы динамического перемещения кода (dynamic relocation entries) файла. Это имеет смысл только для динамических объектов, таких как определенные типы shared-библиотек. Как и в случае опции -r, если опция -R указана вместе с -d или -D, то перемещения печатаются вперемежку с дизассемблированием.
-s --full-contents
Отображается полное содержимое любых запрошенных секций (в двоичном и текстовом виде). По умолчанию отображаются все непустые секции.
-S --source
Если возможно, то отображается исходный код вперемежку с дизассемблером. Подразумевает -d.
--source-comment[=txt]
Работает наподобие опции -S, но все строки исходного кода отображаются с префиксом txt. Обычно txt это строка комментария, которая может использоваться, чтобы отделить код ассемблера от исходного кода. Если txt не предоставлен, то по умолчанию используется строка "# " (решетка с пробелом).
--prefix=prefix
Указывает префикс, добавляемый к абсолютному пути, когда используется вместе с -S.
--prefix-strip=level
Показывает, как много начальных имен директорий следует вырезать из жестко указанного абсолютного пути. Эта опция не дает эффекта без опции --prefix=prefix.
--show-raw-insn
При дизассемблировании инструкций печатает инструкцию в hex вместе с символической формой. Это умолчание кроме ситуаций, когда используется --prefix-addresses.
--no-show-raw-insn
При дизассемблировании инструкций не печатать байты инструкций. Это умолчание, когда используется --prefix-addresses.
--insn-width=width
Отобразит width байт в одной строке при дизассемблировании инструкций.
--visualize-jumps[=color|=extended-color|=off]
Визуально выделяет инструкции прыжка, которые находятся внутри функции, путем рисования ASCII art между начальным и конечным адресами. Опциональный аргумент =color добавит цвет к выводу с использованием простых цветов терминала. Альтернативно аргумент =extended-color добавляет цвет, используя 8-разрядные цвета, но на некоторых терминалах это может не сработать.
Если необходимо запретить опцию --visualize-jumps после того, как она была разрешена ранее, то используйте --visualize-jumps=off.
--disassembler-color=[color|extended-color|off]
Применяет подсветку синтаксиса для вывода дизассемблера. Аргумент color добавляет цвет с использованием простых цветов терминала. Альтернативно аргумент =extended-color добавляет цвет, используя 8-разрядные цвета, но на некоторых терминалах это может не сработать.
Если нужно запретить опцию --disassembler-color после того, как она была разрешена ранее, то используйте --disassembler-color=off.
-W[lLiaprmfFsoORtUuTgAckK] --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links]
Отобразит содержимое отладочных секций DWARF в файле, если они имеются. Компрессированные секции debug автоматически декомпрессируются (временно) перед их отображением. Если одна или большее количество опциональных букв следует за этим ключом, то будут выведен только этот тип (типы) данных. Буквы и слова относятся к следующей информации:
"a" "=abbrev"
Отображает содержимое секции .debug_abbrev.
"A" "=addr"
Отображает содержимое секции .debug_addr.
"c" "=cu_index"
Отображает содержимое секций .debug_cu_index и/или .debug_tu_index.
"f" "=frames"
Отобразит сырое содержимое секции .debug_frame.
"F" "=frames-interp"
Отобразит интерпретированное содержимое секции .debug_frame.
"g" "=gdb_index"
Отображает содержимое секций .gdb_index и/или .debug_names.
"i" "=info"
Отобразит содержимое секции .debug_info. Примечание: форма вывода из этой опции может быть тажке ограничена использованием опций --dwarf-depth и --dwarf-start.
"k" "=links"
Отобразит содержимое секций .gnu_debuglink, .gnu_debugaltlink и .debug_sup, если они присутствуют. Также отобразит любые ссылки на отдельные объектные файлы DWARF (dwarf object files, dwo), если они указаны атрибутами DW_AT_GNU_dwo_name или DW_AT_dwo_name в секции .debug_info.
"K" "=follow-links"
Отобразит содержимое любых выбранных debug-секций, которые были найдены в линкованных, отдельных файлах отладочной информации. Это может привести к нескольким версиям отображения секции debug, если она имеется в более чем одном файле.
Дополнительно, когда отображаются атрибуты DWARF, если найдена форма, которая ссылается на отдельный файл отладочной информации, то будет также отображено содержимое файла, на который была ссылка.
Примечание: в некоторых дистрибутивах эта опция разрешена по умолчанию. Она может быть запрещена через опцию отладки N. Умолчание может быть выбрано при конфигурировании binutils через опции --enable-follow-debug-links=yes или --enable-follow-debug-links=no. Если они не используются, то по умолчанию разрешены следующие debug-ссылки. Если была разрешена поддержка протокола debuginfod, когда были собраны binutils, то эта опция будет также включать попытку соединения с серверами debuginfod, упомянутыми в переменной окружения DEBUGINFOD_URLS. Для разрешения это отнимет некоторое время. Такое поведение можно запретить через опцию отладки =do-not-use-debuginfod.
"N" "=no-follow-links"
Запрещает следовать линкам на отдельные файлы информации отладки.
"D" "=use-debuginfod"
Разрешает взаимодействие с серверами debuginfod, если они нужны для следования debug links. Это поведение по умолчанию.
"E" "=do-not-use-debuginfod"
Запрещает взаимодействие с серверами debuginfod, если они нужны для следования debug links. Это поведение по умолчанию.
"l" "=rawline"
Отобразит содержимое секции .debug_line в сыром формате.
"L" "=decodedline"
Отобразит интерпретированное содержимое секции .debug_line.
"m" "=macro"
Отобразит содержимое секций .debug_macro и/или .debug_macinfo.
"o" "=loc"
Отобразит содержимое секций .debug_loc и/или .debug_loclists.
"O" "=str-offsets"
Отобразит содержимое секции .debug_str_offsets.
"p" "=pubnames"
Отобразит содержимое секций .debug_pubnames и/или .debug_gnu_pubnames.
"r" "=aranges"
Отобразит содержимое секции .debug_aranges.
"R" "=Ranges"
Отобразит содержимое секций .debug_ranges и/или .debug_rnglists.
"s" "=str"
Отобразит содержимое секций .debug_str, .debug_line_str и/или .debug_str_offsets.
"t" "=pubtype"
Отобразит содержимое секций .debug_pubtypes и/или .debug_gnu_pubtypes.
"T" "=trace_aranges"
Отобразит содержимое секции .trace_aranges.
"u" "=trace_abbrev"
Отобразит содержимое секции .trace_abbrev.
"U" "=trace_info"
Отобразит содержимое секции .trace_info. Примечание: отображение содержимого секций .debug_static_funcs, .debug_static_vars и debug_weaknames в настоящее время не поддерживается.
--dwarf-depth=n
Ограничит дамп секции ".debug_info" n дочерними элементами. Это полезно использовать только с --debug-dump=info. По умолчанию печатаются все DIE; специальное значение 0 для n даст такой же эффект. Для ненулевого значения n, не будут напечатаны DIE глубже, чем n или большее количество уровней. Значение n используется как базовое относительно нуля.
--dwarf-start=n
Печатает любые DIE, начиная с DIE под номером n. Это полезно только вместе с --debug-dump=info. Если опция --dwarf-start=n указана, то подавляется печать любой информации заголовка и всех DIEs до DIE с номером n. Напечатаются только братья и потомки указанного DIE. Это можно использовать вместе с --dwarf-depth.
--dwarf-check
Разрешает дополнительные проверки целостности информации DWARF.
--ctf[=section]
Отобразит содержимое указанной секции CTF. Секции CTF сами содержат множество подсекций, которые все отобразятся по порядку. По умолчанию отобразится имя секции .ctf, это имя было выдано ld.
--ctf-parent=member
Если секция CTF содержит не определенные однозначно типы, она будет состоять из архива многих словарей CTF, наследуемых из одного словаря, содержащего неоднозначно определенные типы. Этот член по умолчанию имеет имя .ctf наподобие содержащей его секции, но можно поменять это имя, используя функцию "ctf_link_set_memb_name_changer" во время линковки. Когда просматриваются архивы, созданные линкером, использующим изменение имени для переименования родительского члена архива, --ctf-parent может использоваться с целью указания имени для родителя (parent).
-G --stabs
Отобразится полное содержимое любых секций. Отобразится содержимое секций .stab, .stab.index и .stab.excl из ELF-файла. Это полезно только для систем (таких как Solaris 2.0), в которых элементы ".stab" таблицы символов отладки debugging находятся в секции ELF. В большинств других форматов файлов, элементы в таблице символов чередуются с символами линковки, видимыми в выводе --syms.
--start-address=address
Начинает отображение данных по указанному адресу. Это влияет на вывод опций -d, -r и -s.
--stop-address=address
Остановит отображение данных по указанному адресу. Это влияет на вывод опций -d, -r и -s.
-t --syms
Напечатает таблицу символов файла. Это подобно информации, предоставляемой программой nm, хотя формат отображения отличается. Формат вывода зависит от формата анализируемого файла, но существует 2 основных типа. Один из них выглядит примерно так:
[ 4](sec 3)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .bss [ 6](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 fred
Здесь числа в квадратных скобках это номер элемента в таблица символов, номер sec это номер секции, значение fl это биты флагов символа, число ty обозначает тип символа, число scl это storage class символа, и значение nx это число дополнительных записей, связанных с символом. Последние два поля это значение символа и его имя.
Другой общеизвестный формат вывода, который обычно можно видеть в файлах, основанных на формате ELF, выглядит примерно так:
00000000 l d .bss 00000000 .bss 00000000 g .text 00000000 fred
Здесь первое число это значение символа (иногда упоминаемое как его адрес). Следующее поле это набор символов и пробелов, показывающих биты флагов, которые установлены для символа. Эти символы описаны ниже. Далее идет обозначение секции или если указано *ABS*, то это абсолютно размещенная секция (т. е. не связанная ни с одной секцией), или *UND*, если на секцию есть ссылка в анализируемом файле, но здесь она не определена. После имени секции идет другое поле - число, которое для большинства символов представляет выравнивание, и для других символов это размер. В завершение отображено имя символ.
Символы флагов поделены на 7 групп следующим образом:
"l" "g" "u" "!"
Это обозначение для символа local (l), global (g), unique global (u), не global и не local (пробел) или одновременно и global и local (!). Символ, который не может быть ни локальным ни глобальным по разным причинам, например из-за того, что используется для отладки, но он вероятно является признаком ошибки, если когда-либо является и глобальным, и локальным. Уникальные глобальные символы это расширение GNU для стандартного набора привязки символов ELF. Для такого символа динамический компоновщик должен убедиться, что во всем процессе имеется только один символ с таким именем и типом.
"w"
Символ weak (w) или strong (пробел).
"C"
Символ обозначает конструктор (C) или обычный символ (пробел).
"W"
Символ предупреждения (W) или нормальный символ (пробел). Имя символа предупреждения это сообщение для отображения, если имеются ссылки на символ, который идет за символом предупреждения.
"I" "i"
Символ, косвенно ссылающийся на другой символ (I), функция для распознавания во время reloc-процесса (i) или обычный символ (пробел).
"d" "D"
Отладочный символ (d) или динамческий символ (D), или обычный символ (пробел).
"F" "f" "O"
Символ это имя функции (F), или файла (f), или объекта (O), или обычный символ (пробел).
-T --dynamic-syms
Печатает элементы таблицы динамических символов файла. Это имеет смысл только для динамических объектов, таких как определенные типы shared-библиотек. Это подобно информации, предоставленной программой nm, когда указана опция -D (--dynamic). Формат вывода подобен опции --syms, кроме дополнительного поля, вставленного перед именем символа, которое дает информацию версии, связанной с символом. Если версия это версия по умолчанию для использования при разрешении ссылок без версии, то символ отображается как есть, иначе он заключается в круглые скобки.
--special-syms
Когда отображаемые символы включают те, которые target считает по какой-то причине специальными, и которые обычно не интересуют пользователей.
-U [d|i|l|e|x|h] --unicode=[default|invalid|locale|escape|hex|highlight]
Управляет отображением кодированных несколькими байтами символов UTF-8 в строках. Умолчание (--unicode=default) означает не применять никакой специальной обработки. Опция --unicode=locale отображает последовательность в текущей локали, которая может или не может поддерживаться. Опции --unicode=hex и --unicode=invalid отобразит их как последовательность байт hex, заключенная либо в угловые, либо фигурные скобки. Опция --unicode=escape отобразит их как escape-последовательности (\uxxxx), и опция --unicode=highlight отобразит из как escape-последовательности, помеченные красным цветом (если это поддерживается устройством вывода). Раскрашивание цветом предназначено для привлечения внимания к наличию последовательности Юникода, наличие которого не ожидается.
-V --version
Печатает номер версии и завершает работу.
-x --all-headers
Отображает всю доступную информацию заголовка, включая таблица символов и записи перемещения кода (relocation entries). Использование -x эквивалентно указанию всех опций -a -f -h -p -r -t.
-w --wide
Форматирование некоторых строк для устройств вывода, которые могут отображать текст в более чем 80 столбцах. Это также не делает обрезку имен символов при их отображении.
-z --disassemble-zeroes
Обычно вывод дизассемблера пропускает блоки нулей. Эта опция указывает дизассемблеру дизассемблировать эти блоки, точно так же, как и любые другие данные.
@file
Чтение опций командной строки из файла. Опции считываются и вставляются в место командной строки, где указана опция @file. Если указанный файл не существует, или не может быть прочитан, то опция будет обработана буквально, без удаления. Опции в фале отделяются друг от друга пробелом. Символ пробела может быть включен в опцию путем заключения всей опции либо в одиночные, либо в двойные кавычки. Любой символ (включая обратный слеш) может быть включен с префиксом в виде обратного слеша. Файл сам по себе может содержать дополнительные опции @file; любая такая опция будет обработана рекурсивно.
См. также: nm(1), readelf(1), а также элементы Info для binutils.
[Ссылки]
1. OBJDUMP display information from object files site:manpages.debian.org. 2. Name mangling site:wikipedia.org. |