MS COFF CodeView Symbols

Тема в разделе "WASM.WIN32", создана пользователем wasm_test, 27 окт 2010.

  1. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    У кого есть инфа по формату начиная с Visual C 8.0 версии, дайте ссылку или заделитесь.
    Открытой документации нет, только на C6 codeview debug symbols у шрайбера.
    Опять поднимаю тему pdbparser'а, там это единственная загвоздка, реверсить mspdbXX.dll это жесть.
    Накидайте ссылок на опенсорс линкеры, работающие с MS COFF и PE EXE.

    (пишу свой линкер для одной задачи нужно).
     
  2. ivan2k2

    ivan2k2 New Member

    Публикаций:
    0
    Регистрация:
    28 янв 2006
    Сообщения:
    95
    хttp://www.openwatcom.org/ftp/devel/docs/CodeView.pdf
    оно или не оно?
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    какая версия pdb?
    старше 20040203?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    Можно и такую. (пс. интересует не само пдб, а формат самих CodeView Symbols, которые и в .obj бывают в .debug$S секциях)

    > хttp://www.openwatcom.org/ftp/devel/docs/CodeView.pdf
    глянем, спасибо. но подсказывает мне закон подлости, что там старая версия =(
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ivan2k2
    а, такой док у меня есть, это из нт4, там вообще рассматривается ныне не используемый формат упаковки символов OMF для представления CodeView в PE EXE
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    а, тебе секцию же надо.
    ну там вроде всё проще, хотя уже не помню точно.
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    да, сам MSF/PDB/TPI уже разпилил)

    Можешь кинуть описания CodeView структурок? Ну если у тебя конечно что-то отличное от известного всем CV4.
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Была, там не то. И да, кстати, я могу рассказать тебе про одну из секций, .debug$T, там типы. Если надо, есть сорс парсинга и восстановления инфы о типах в формате сишного хидера (не закончено).
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нафига смотреть названия секций если есть директория?
    я в своё время использовал сорцы вайна, там есть парсинг этого, только не знаю, насколько актуально.
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    n0name
    Вайн писался в прошлом веке и там парсинг всех структур COFF идет только очень древних версий.

    Ну значит рассказываю.
    Раньше производилась генерация .DBG файла и отладочной информации в формате OMF. Потом разработали принципиально новый формат PDB (на базе мультипотокового контейнера MSF - Multi-Stream File).
    Информация из секций .debug$* в конце концов попадает в .DBG/.PDB файл в результате компоновки.

    .debug$S содержит символьную информацию как правило. Первый дворд это
    Код (Text):
    1. typedef struct CVSIG {
    2.   DWORD dwSignature; // 1 - CV3, 2 - CV4, 3 - ??, 4 - C7
    3. } 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):
    1. typedef struct _ALIGNSYM {
    2.   WORD wLen; // длина символа без учета этого поля (но с учетом следующего поля! оффсет следующего блока: wLen + sizeof(WORD))
    3.   WORD wRecType; // тип записи (см. дефайны S_*, например S_COMPILE)
    4. } 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
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Есть кстати интересная инфа про другие связанные файлы:
    vcXX.idb - тоже MSF контейнер
    *.sbr - Browse Information
    *.ilk - Incremental Linker Database
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    там ничего нет.
    OMF это предыдущий формат, нигде в инете нет парсера последнего формата, я уже искал, поверь.
    Так что то, что я тут рассказываю, уникально =) Хотя бы на русском.
     
  13. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    В сорцах винды есть сорцы линкера
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    тогда vc 8 не было :)
     
  15. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    n0name
    В фразе

    ничего не сказано про vc 8.
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    фразы из контекста вырывать это отличная идея.
    и если уж на то пошло, то сорцы винды это не опенсорс линкер.
    > У кого есть инфа по формату начиная с Visual C 8.0 версии, дайте ссылку или заделитесь.
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Asterix
    Если бы у меня не было сорцов, я бы так и сказал. Думаешь я их еще не смотрел?
    Там допотопная версия.
     
  18. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Она обращается к mspdbXX.dll, которая перенаправляет запросы в mspdbcore.dll, ее уже реверсил, пользы мало, даже с символами.

    Сразу же понятно, что максимум, что там хендлится, это CV4.
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    спорить будешь? )
    поверь, собственно парсинг - в mspdbcore. раньше был в самой mspdbXX, но потом выпилили, сделали что-то клиент/серверное.
    смысл? ) формат codeview там такой же, как и в pdb
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Ага, щас) Добавление типов не самое страшное.