Это команда pahole, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
pahole - Показывает и управляет макетом структуры данных.
СИНТАКСИС
Pahole [кредита] файлов
ОПИСАНИЕ
Pahole показывает макеты структур данных, закодированные в форматах отладочной информации, DWARF и
CTF поддерживается.
Это полезно, помимо прочего: для оптимизации важных структур данных за счет сокращения
его размер, выясняя, какое поле находится со смещением от начала данных
структура, изучение изменений ABI и более общее понимание новой кодовой базы, которую вы
придется работать.
Файлы должны иметь связанную отладочную информацию. Эта информация может быть внутри
файл, в секциях ELF или в другом файле.
Один из способов получить эту информацию - указать -g опция для компилятора при сборке
Это. Когда это будет сделано, информация будет сохранена в разделе ELF. Для DWARF
формат отладочной информации, который, помимо прочего, добавляет .debug_info Раздел ELF. Для
CTF находится всего в одном разделе ELF, .SUNW_ctf.
The отладочная информация пакеты, доступные в большинстве дистрибутивов Linux, также поддерживаются Pahole,
где отладочная информация доступна в отдельном файле.
По умолчанию Pahole показывает расположение всех именованных структур в указанных файлах.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
pahole поддерживает следующие параметры.
-С, --class_name = ИМЕНА КЛАССА
Покажи только эти классы. Это может быть список имен классов, разделенных запятыми, или файл
URL-адреса (например: file: //class_list.txt)
-с, --cacheline_size = РАЗМЕР
Установите размер строки кэша на SIZE байт.
-А ТАКЖЕ, --expand_types
Разверните учеников. Полезно найти, в каком элементе внутренних структур находится
смещение от начала структуры.
-Ф, --format_path
Позволяет указать список форматов отладки по порядку. Прямо сейчас это
включает "ctf" и "dwarf". Путь к формату по умолчанию эквивалентен "-F".
карлик, ctf ".
-р, --rel_offset
Отображение относительных смещений элементов во внутренних структурах.
-п, --expand_pointers
Разверните элементы указателя класса.
-Р, - реорганизовать
Реорганизация структуры, понижение и объединение битовых полей, перемещение элементов для удаления
отверстия для выравнивания и прокладка.
-С, --show_reorg_steps
Показывать макет структуры на каждом этапе реорганизации.
-я, --contains = CLASS_NAME
Показать классы, содержащие CLASS_NAME.
-a --anon_include
Включите анонимные классы.
-А, --nested_anon_include
Включите вложенные (внутри других структур) анонимные классы.
-Б, --bit_holes = NR_HOLES
Показывать только структуры не менее NR_HOLES битовых отверстий.
-д, - рекурсивный
Рекурсивный режим, влияет на несколько других флагов.
-Д, --decl_exclude = ПРЕФИКС
исключить классы, объявленные в файлах с PREFIX.
-ф, --find_pointers_to = ИМЯ КЛАССА
Найдите указатели на CLASS_NAME.
-ЧАС, --holes = NR_HOLES
Показывать только структуры с как минимум NR_HOLES отверстиями.
-Я, --show_decl_info
Показать файл и номер строки, в которой были определены теги, если они доступны в
отладочная информация.
-л, --show_first_biggest_size_base_type_member
Показать первый член base_type наибольшего размера.
-м, --nr_methods
Покажите количество методов.
-М, --show_only_data_members
Показывать только те члены, которые используют пространство в макете класса. Методы C ++ будут
подавлено.
-н, --nr_members
Показать количество участников.
-Н, --class_name_len
Покажите размер классов.
-О, --dwarf_offset = СМЕЩЕНИЕ
Показать тег с DWARF OFFSET.
-П, - упаковываемый
Показывать только структуры, в которых есть дыры, которые можно упаковать, если элементы реорганизованы, для
пример при использовании - реорганизовать опцию.
-д, --тихий
Будьте тише.
-с, --размеры
Покажите размер классов.
-т, --separator = SEP
Используйте SEP в качестве разделителя полей.
-Т, --nr_definitions
Показать, сколько раз определялась структура.
-у, --define_in
Показать CU, где определено CLASS_NAME (-C).
-- Flat_arrays
Сглаживайте массивы, чтобы array [10] [2] стал array [20]. Полезно при создании
из кодировок CTF и DWARF для одного и того же двоичного файла в целях тестирования.
--fixup_silly_bitfields
Преобразует глупые битовые поля, такие как "int foo: 32", в простое "int foo".
-В, --подробный
быть многословным
-ш, --word_size = РАЗМЕР_СЛОВА
Измените размер слова арки на WORD_SIZE.
-Икс, --exclude = ПРЕФИКС
Исключить ПРЕФИКСИРОВАННЫЕ классы.
-ИКС, --cu_exclude = ПРЕФИКС
Исключить ПРЕФИКСИРОВАННЫЕ единицы компиляции.
-у, --prefix_filter = ПРЕФИКС
Включите ПРЕФИКСИРОВАННЫЕ классы.
-з, --hole_size_ge = РАЗМЕР ОТВЕРСТИЯ
Показывать только структуры, у которых хотя бы одно отверстие больше или равно HOLE_SIZE.
ПРИМЕЧАНИЯ
Чтобы включить создание отладочной информации в процессе сборки ядра Linux, выберите
CONFIG_DEBUG_INFO. Это можно сделать с помощью команды make menuconfig по следующему пути: «Взлом ядра».
-> «Отладка ядра» -> «Скомпилировать ядро с отладочной информацией».
Многие дистрибутивы также поставляются с пакетами debuginfo, поэтому просто включите его в своем пакете.
конфигурация репозитория менеджера и установка kernel-debuginfo или любого другого пользовательского пространства
программа, написанная на языке, который компилятор генерирует debuginfo (C, C ++, для
экземпляр).
Используйте pahole онлайн с помощью сервисов onworks.net