.PDB вариант №
Файл с расширением .pdb представляет собой файл базы данных программы, содержащий отладочную информацию для скомпилированного исполняемого файла (EXE/DLL). Файлы PDB генерируются компиляторами Microsoft, когда прикладная программа компилируется в режиме отладки. Наличие файла PDB может помочь в обратном проектировании исполняемого файла, поскольку он содержит важную информацию обо всех символах модулей. Именно по этой причине эти файлы хранятся отдельно от окончательного исполняемого файла. Microsoft DgbHelp API может открыть файл PDB для получения такой информации, как общедоступные и экспортированные, глобальные символы, локальные символы, тип данных, исходные файлы и номера строк.
Формат PDB-файла
PDB — это собственный файловый формат Microsoft, который еще нигде официально не документирован. Однако начальная документация доступна здесь, и на нее можно ссылаться.
Потоки 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. Существует также неупорядоченный корневой поток, который содержит некоторые метаданные.