Предложения о том, как написать инструмент преобразования формата отладки - PullRequest
4 голосов
/ 26 августа 2010

Я хочу написать инструмент, предназначенный для преобразования отладочных символов одного формата в другой, совместимый для использования в GDB. Это кажется утомительным и потенциально сложным проектом, поэтому я не совсем уверен, как его решить.

По сути, я стремлюсь преобразовать таблицу символов отладки Turbo (TDS), генерируемую компиляторами borland, во что-то вроде формата «удар» или «карлик» (кажется, что в моих исследованиях предпочитается «карлик»). Но в идеале я хочу спроектировать свой инструмент так, чтобы его можно было легко расширять, чтобы впоследствии он мог конвертировать другие форматы. например codeview4 или, может быть, даже pdb.

Моя основная мотивация для создания этого:

  • Interoperability. Если я смогу преобразовать внешний формат отладки в форму, с которой может работать gdb, тогда отладка на уровне исходного кода будет возможна на двоичных файлах, скомпилированных из другого компилятора, кроме gcc. Это означает, что любой интерфейс отладки внешнего интерфейса, который использует gdb в качестве внутреннего интерфейса, также будет работать.
  • Других инструментов не существует. Я провел поиск в Google схожих инструментов, и самое близкое, что я нашел, это tds2dbg . Но это не совсем то, что я ищу.

Над чем я сейчас работаю:

  • У меня уже есть API отладочной ловушки , который может понимать формат отладки TDS. Я могу использовать это, чтобы помочь мне получить необходимую информацию из исходного формата, из которого я конвертирую.
  • В рамках этого проекта я в основном заинтересован в том, чтобы заставить его работать в среде win32. Другие платформы и инструменты, которые меня не особо беспокоят.
  • Целевой формат отладки дварфа, в который я конвертирую. С этим я совсем не знаком. Ранее я использовал портированные компиляторы gcc, такие как MinGW, и отлаживал их с помощью gdb в формате dwarf. Но я понятия не имею, как этот формат реализован в Windows.

Последнее, о чем я беспокоюсь. Я читаю документацию по спецификациям дварфов, но обнаруживаю, что мне сложно понять и понять, как это работает. Там так много подробностей, но в то же время нет подробностей о том, как dwarf реализуется в объектных файлах и файлах изображений на платформе, которая изначально не использует ELF, а именно в формате PE-COFF, который использует Windows. , Документация также очень плохо читается, длинные предложения затрудняют ее понимание, а диаграммы и иллюстрации редки. Я натолкнулся на API под названием libDwarf , который должен взять большую часть анализа при интерпретации дварфа. Проблема в том, что я все еще пытаюсь заставить его строить, и я пока не знаю, как это сработает.

Я еще не написал ни одного кода, так как не до конца понимаю, что именно мне нужно создать. У меня такое чувство, что самым большим препятствием будет понимание того, как работать с карликом из-за его сложности. Поиск информации о том, как гномы работают под окнами, тоже не помог. Как, например, нет информации о «склеивающем» коде, который необходим для содержания карлика в исполняемом файле образа PE. Как точно выложены карликовые секции? Есть ли заголовки для каждого раздела? GDB явно не просто берет «сырой» файл отладки дварфа и использует его как есть. Так в каком формате GDB ожидает, чтобы файл отладки мог работать с ним?

У меня вопрос, как мне начать такой проект? Что еще более важно, куда я могу обратиться за помощью, когда я неизбежно застреваю в проблеме?

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Affinic Assembler для Windows

Affinic Assembler - это сборщик x86 / x86-64 для Windows, который берет источник сборки GAS-синтаксиса с отладочной информацией DWARF и генерирует соответствующие разделы формата CodeView в объектном файле, чтобы сделать связанную программу отлаживаемой в Visual Studio. Эта программа хороша для пользователей Cygwin и MinGW для переноса кода Linux на Windows.

http://www.affinic.com/?page_id=48

1 голос
/ 29 августа 2010

Вы задаете несколько вопросов здесь :-)

  1. Я думаю, вы движетесь в правильном направлении, используя libdwarf. НО, вы взглянули на objcopy, чтобы увидеть, может ли этот инструмент выполнить часть работы за вас? Вероятно, он не поддерживает borland, pdb или codeview4, но, возможно, стоит посмотреть. (Другой подход может заключаться в расширении objcopy для поддержки форматов, между которыми вы пытаетесь конвертировать.)

  2. Я использовал список рассылки dwarf-обсудить иногда, когда застрял. http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org

  3. Что касается вопросов по карлику, разделите их на отдельные вопросы, и я сделаю все возможное, чтобы ответь им. : -)

...