.PDB вариант №
Файл с расширением .pdb представляет собой файл базы данных программы, содержащий отладочную информацию для скомпилированного исполняемого файла (EXE/DLL). Файлы PDB генерируются компиляторами Microsoft, когда прикладная программа компилируется в режиме отладки. Наличие файла PDB может помочь в обратном проектировании исполняемого файла, поскольку он содержит важную информацию обо всех символах модулей. Именно по этой причине эти файлы хранятся отдельно от окончательного исполняемого файла. Microsoft [DgbHelp API] (https://docs.microsoft.com/en-us/windows/win32/debug/dbghelp-functions) может открыть файл PDB для получения такой информации, как общедоступные и экспортированные, глобальные символы, локальные символы, тип данных, исходные файлы и номера строк.
Формат PDB-файла
PDB — это собственный файловый формат Microsoft, который еще нигде официально не документирован. Однако начальная документация доступна [здесь] (https://github.com/Microsoft/microsoft-pdb), и на нее можно ссылаться.
Потоки PDB
Файлы PDB состоят из нескольких потоков, где каждый поток действует как отдельный виртуальный файл и содержит информацию. Авторы файлов PDB могут записывать в эти файлы, и файл завершается только после того, как будет выдана явная фиксация. Компилятор может продолжать запись в файл PDB, но фиксировать только в том случае, если весь пользовательский код компилируется успешно. Файл PDB состоит из следующих потоков:
Номер потока | Содержание | Краткое описание |
---|---|---|
1 | Pdb (заголовок) | Информация о версии и информация для подключения этой PDB к EXE |
2 | Tpi (менеджер типов) | Все типы, используемые в исполняемом файле. |
3 | Dbi (информация об отладке) | Содержит материалы раздела и список «Модов» |
4 | ИмяКарта | Содержит таблицу хешированных строк |
4-(n+4) | n Mod’s (информация о модуле) | Каждый поток Mod содержит символы и номера строк для одной компиляции |
n+4 | Хэш глобального символа | Индекс, позволяющий искать в глобальных символах по имени |
n+5 | Хэш публичного символа | Индекс, позволяющий искать в публичных символах по адресам |
n+6 | Записи символов | Актуальные записи глобальных и общедоступных символов |
n+7 | Введите хэш | Хэш, используемый потоком TPI. |
Каждый поток в файле PDB состоит из нескольких страниц, которые не обязательно нумеруются последовательно.
Заголовок PDB
Файл PDB имеет заголовок, состоящий из подписи для идентификации и проверки конкретного формата. Длина подписи зависит от формата PDB. Заголовок может быть длиннее одной страницы.
Метаданные PDB
Метаданные PDB отвечают за распознавание всех потоков компонентов, задавая длину и последовательность страниц для каждого потока. Заказы отдаются потокам последовательно; начиная с 0. Существует также неупорядоченный корневой поток, который содержит некоторые метаданные.
использованная литература
- PDB - Википедия
- [Майкрософт PDB] (https://github.com/Microsoft/microsoft-pdb)