Nano Hash - криптовалюты, майнинг, программирование

Сборка: как сгенерировать .section .debug_info?

Это более точная версия этого вопроса: Создание символов отладки для gdb вручную. Я генерирую ассемблерный код для своего языка и хочу иметь возможность наблюдать за переменными. AFAIK, что позволяет это сделать, определяется после

.section        .debug_info,"",@progbits

Вопрос: как мне сгенерировать .section .debug_info для DWARF (поскольку у меня Linux, но на самом деле меня устраивает все, что работает)? Есть ли где-нибудь документация по этому разделу?

Давайте для конкретности поговорим об этой программе:

int sum(int a, int b) { 
    return a+b;
}

Сгенерированный asm можно увидеть здесь (x86-64 gcc 7.3): https://godbolt.org/z/ooTuuO Та его часть, которая, как мне кажется, мне нужна:

.Ldebug_info0:
        .long   0x6f
        .value  0x4
        .long   .Ldebug_abbrev0
        .byte   0x8
        .uleb128 0x1
        .long   .LASF0
        .byte   0x4
        .long   .LASF1
        .long   .LASF2
        .quad   .Ltext0
        .quad   .Letext0-.Ltext0
        .long   .Ldebug_line0
        .uleb128 0x2
        .string "sum"
        .byte   0x1
        .byte   0x1
        .long   .LASF3
        .long   0x6b
        .quad   .LFB0
        .quad   .LFE0-.LFB0
        .uleb128 0x1
        .byte   0x9c
        .long   0x6b
        .uleb128 0x3
        .string "a"
        .byte   0x1
        .byte   0x1
        .long   0x6b
        .uleb128 0x2
        .byte   0x91
        .sleb128 -20
        .uleb128 0x3
        .string "b"
        .byte   0x1
        .byte   0x1
        .long   0x6b
        .uleb128 0x2
        .byte   0x91
        .sleb128 -24
        .byte   0
        .uleb128 0x4
        .byte   0x4
        .byte   0x5
        .string "int"
        .byte   0

Я вижу имена переменных, но кроме этого ничего не понимаю. Что я пытался посмотреть:

  • https://stackoverflow.com/a/30212164/2956272. Он содержит некоторую полезную информацию (например, значение меток .loc и .LFB, .LFE), но ее недостаточно для понимания содержания раздела.
  • https://sourceware.org/binutils/docs-2.18/as/Symbols.html — есть некоторая информация о символах, но она слишком общая.
  • Документация по гномам: http://dwarfstd.org/doc/DWARF4.pdf . Я, конечно, только бегло просмотрел, но не увидел ничего, что соответствовало бы тому, что я вижу в ассемблере. Как я понимаю, есть почти прямой перевод того, что я вижу, в Dwarf, но я не знаю, как это делается.
  • И многие другие.

Другими словами, мне не удалось найти документацию по этому разделу. Вы знаете, где я могу найти его?


  • Это отладочная информация DWARF, поэтому документация находится в стандарте DWARF, на который вы ссылаетесь. Вам действительно нужно будет прочитать его. Имена символов .LFE0, .LASF0 и т. д. произвольны, вы можете выбрать свои собственные имена при создании собственной отладочной информации. Для документации о том, что директивы ассемблера. .long, .uleb128 и т. д. вам нужно будет прочитать документацию по ассемблеру GNU, но это должно быть очевидно после того, как вы прочитали и поняли документацию DWARF. 07.12.2018
  • @RossRidge, спасибо! Я только что запустил readelf --debug-dump=info a.out и чувствую себя довольно глупо. У меня есть вопрос о DW_AT_language (исходный язык), если вы не возражаете. У него есть какой-то предопределенный набор языков, и мой язык на самом деле даже не похож на них. Это имеет значение? Смогу ли я использовать информацию о символах для своего языка? Я не понял из соответствующих разделов, на что именно влияет этот атрибут. 07.12.2018
  • Неважно. Кажется, это для спецификации типа: A type unit entry may have a DW_AT_language attribute... 07.12.2018

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..