Какво е PDB файл?
Файл с разширение .pdb е програмен файл с база данни, който съдържа информация за отстраняване на грешки за компилиран изпълним файл (EXE/DLL). PDB файловете се генерират от Microsoft Compilers, когато приложна програма се компилира в режим на отстраняване на грешки. Наличието на PDB файл може да помогне при обратното инженерство на изпълним файл, тъй като съдържа значителна информация за всички символи на модулите. Поради тази причина тези файлове се съхраняват отделно от крайния изпълним файл. [API за DgbHelp] на Microsoft (https://learn.microsoft.com/en-us/windows/win32/debug/dbghelp-functions) може да отвори PDB файл, за да получи информация като публични и експортирани, глобални символи, локални символи, тип данни, изходни файлове и номера на редове.
PDB файлов формат
PDB е собствен файлов формат на Microsoft и все още не е официално документиран никъде. Начална документация обаче е достъпна тук и може да се направи справка.
PDB потоци
PDB файловете се състоят от множество потоци, където всеки поток действа като виртуален отделен файл и съдържа информация. Писателите на PDB файлове могат да пишат в тези файлове и файлът се финализира само след подаване на изричен ангажимент. Компилаторът може да продължи да пише в PDB файл, но да се ангажира само ако целият потребителски код се компилира успешно. PDB файлът се състои от следните потоци:
Поток № | Съдържание | Кратко описание |
---|---|---|
1 | Pdb (заглавка) | Информация за версията и информация за свързване на този PDB към EXE |
2 | Tpi (Мениджър на типове) | Всички типове, използвани в изпълнимия файл. |
3 | Dbi (Информация за отстраняване на грешки) | Съдържа приноси на секции и списък с „Модове“ |
4 | NameMap | Съдържа таблица с хеширани низове |
4-(n+4) | n Модове (информация за модула) | Всеки мод поток съдържа символи и номера на редове за една компилация |
n+4 | Глобален хеш на символа | Индекс, който позволява търсене в глобални символи по име |
n+5 | Обществен хеш на символа | Индекс, който позволява търсене в публични символи по адреси |
n+6 | Записи на символи | Актуални записи на символи на глобални и публични символи |
n+7 | Въведете hash | Хеш, използван от TPI потока. |
Всеки поток в PDB файл се състои от няколко страници, които не са непременно последователно номерирани.
PDB заглавка
PDB файлът има заглавие, което се състои от подпис за идентифициране и валидиране на конкретния формат. Дължината на подписа зависи от формата на PDB. Заглавката може да е по-дълга от една страница.
PDB метаданни
Метаданните на PDB отговарят за разпознаването на всички компонентни потоци, като дават дължината и последователността на страниците за всеки поток. Поръчките се дават на потоците последователно; започвайки с 0. Има и неподреден основен поток, който съдържа някои от метаданните.