У кого есть инфа по формату начиная с Visual C 8.0 версии, дайте ссылку или заделитесь. Открытой документации нет, только на C6 codeview debug symbols у шрайбера. Опять поднимаю тему pdbparser'а, там это единственная загвоздка, реверсить mspdbXX.dll это жесть. Накидайте ссылок на опенсорс линкеры, работающие с MS COFF и PE EXE. (пишу свой линкер для одной задачи нужно).
n0name Можно и такую. (пс. интересует не само пдб, а формат самих CodeView Symbols, которые и в .obj бывают в .debug$S секциях) > хttp://www.openwatcom.org/ftp/devel/docs/CodeView.pdf глянем, спасибо. но подсказывает мне закон подлости, что там старая версия =(
ivan2k2 а, такой док у меня есть, это из нт4, там вообще рассматривается ныне не используемый формат упаковки символов OMF для представления CodeView в PE EXE
n0name да, сам MSF/PDB/TPI уже разпилил) Можешь кинуть описания CodeView структурок? Ну если у тебя конечно что-то отличное от известного всем CV4.
Была, там не то. И да, кстати, я могу рассказать тебе про одну из секций, .debug$T, там типы. Если надо, есть сорс парсинга и восстановления инфы о типах в формате сишного хидера (не закончено).
нафига смотреть названия секций если есть директория? я в своё время использовал сорцы вайна, там есть парсинг этого, только не знаю, насколько актуально.
n0name Вайн писался в прошлом веке и там парсинг всех структур COFF идет только очень древних версий. Ну значит рассказываю. Раньше производилась генерация .DBG файла и отладочной информации в формате OMF. Потом разработали принципиально новый формат PDB (на базе мультипотокового контейнера MSF - Multi-Stream File). Информация из секций .debug$* в конце концов попадает в .DBG/.PDB файл в результате компоновки. .debug$S содержит символьную информацию как правило. Первый дворд это Код (Text): typedef struct CVSIG { DWORD dwSignature; // 1 - CV3, 2 - CV4, 3 - ??, 4 - C7 } CVSIG, *PCVSIG; Если он <= 2, то дальше идут отладочные символы в формате CodeView. update: Если он == 4, то дальше идут блоки с заголовком из двух двордов (type / content_length (длина блока без учета заголовка)), type может быть 0xf1 - тогда после заголовка идут отладочные символы CodeView 0xf2 - line numbers info 0xf3 - file names string table 0xf4 - file information (refers file name strings in 0xf3 block) Формат CodeView. Символы все начинаются с двух вордов Код (Text): typedef struct _ALIGNSYM { WORD wLen; // длина символа без учета этого поля (но с учетом следующего поля! оффсет следующего блока: wLen + sizeof(WORD)) WORD wRecType; // тип записи (см. дефайны S_*, например S_COMPILE) } ALIGNSYM, *PALIGNSYM; Вообще, смотри все блоки xxxSYM в файле cvtypes.h, я его приложу в аттаче для последней документированной версии + результаты реверсинга разработчиков ReactOS + мои. Например, wRecType == S_OBJNAME_ST/S_OBJNAME содержит имя .obj (c путем или без), в котором находится эта секция. .debug$T содержит информацию о типах (в PDB соответствующий Stream называется TPI - TyPe Information). Соответствующие структуры: lf*** (leafs), расписывать подробно формат лень, в тулзе шрайбера win_pdbx есть парсинг TPI с выводом информации о типах в свободном формате, либо мою переделку из проекта pdbparser (прошу прощения за саморекламу) - http://code.google.com/p/pdbparser/source/browse/trunk/symeng/tpi.cpp Там есть вывод информации о типах в формате Си-хидера (как pdbdump). В PDB есть еще блоки GSI/PSGSI (Global Symbol Information / Public Symbol Information) - см. соответствующий файл gsi.cpp в моем проекте, но там парсинг еще не закончен. Так же дополнительную информацию я выложил в http://code.google.com/p/pdbparser/w/list : http://code.google.com/p/pdbparser/wiki/SymFormat - формат потоков GSI, PSGSI, SYM из PDB/MSF http://code.google.com/p/pdbparser/wiki/SymRecordFormat - немножко еще раз про CodeView символы xxxSYM http://www.everfall.com/paste/id.php?3mbt4ptysshv - cvtypes.h До строчки 3044 это pdb_info.h из программы шрайбера, мною модифицированнй. Со строчки 3044 до конца - результат реверсинга + просмотра исходников nt4
Есть кстати интересная инфа про другие связанные файлы: vcXX.idb - тоже MSF контейнер *.sbr - Browse Information *.ilk - Incremental Linker Database
там ничего нет. OMF это предыдущий формат, нигде в инете нет парсера последнего формата, я уже искал, поверь. Так что то, что я тут рассказываю, уникально =) Хотя бы на русском.
фразы из контекста вырывать это отличная идея. и если уж на то пошло, то сорцы винды это не опенсорс линкер. > У кого есть инфа по формату начиная с Visual C 8.0 версии, дайте ссылку или заделитесь.
Asterix Если бы у меня не было сорцов, я бы так и сказал. Думаешь я их еще не смотрел? Там допотопная версия.
Она обращается к mspdbXX.dll, которая перенаправляет запросы в mspdbcore.dll, ее уже реверсил, пользы мало, даже с символами. Сразу же понятно, что максимум, что там хендлится, это CV4.
спорить будешь? ) поверь, собственно парсинг - в mspdbcore. раньше был в самой mspdbXX, но потом выпилили, сделали что-то клиент/серверное. смысл? ) формат codeview там такой же, как и в pdb