Формат PDB файла

Тема в разделе "WASM.WIN32", создана пользователем StatusError, 26 фев 2006.

  1. StatusError

    StatusError New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    34
    Помогите, пожалуйста, если у кого-нидь есть четкая спецификация по архитектуре PDB файла... Буду очень признателен...
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    StatusError



    Старый формат у Шрайбера немного расписан и доступен в инете. Новый я поковырял пару дней и забил :) Если надо только читать - используй стандартный АПИ.
     
  5. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
  6. StatusError

    StatusError New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    34
    Спасибо за отзывы. если честно, я даже довольно неплохо расковырял этот грешный PDB. У меня только возникает проблема, коггда для пропатченного файла я генерю на выходе PDB - если отлаживать в софтайсе, то сишный код куда-то улетает... привязывается в nmsке не к тому адресу... я замучился уже с этой фигней... даже знаю, какой поток надо править, проблема в том, как там интерпретировать данные... такие дела...
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Ты MSF7 ковыряешь? Если я правильно понял, тебе надо 4й поток. Его формат как раз и разбирал (методом тыка :)) но уже не помню :-( В скрипте по моей ссылке можно глянуть... Вообще если с потоком я угадал, то может и получится что либо путное сделать совместными усилиями.
     
  8. StatusError

    StatusError New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    34
    S_T_A_S_

    Есть предложение добить-таки этот формат. Про номер потока точно сказать не могу. Знаю, что главный корневой поток символов имеет номер 3. От него по спискам объектных модулей идут ссылки на символы для каждого obj Файла, из которых линкуется бинарник. А так как файлов может быть сколько угодно, то и номер потока для отдельного объектника не угадать (только читать из заголовка)... Вот щас у меня основной вопрос с таблицей соответствия номеров строк в файле и смещений внутри РЕ секций... там как-то все хитро... Если есть желание объединить усилия по разбору... что ж пиши... обменяемся инфой, а там посмотрим...
     
  9. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Если от нуля считать, то это третий поток. Я придерживался нумерации Шрайбера, хотя может и ошибся =) А про много объектников ты прав, я совсем забыл :dntknw: Мне нужно было просто сгенерить PDB снуля, поэтому для простоты вcю инфу запихал в один поток.



    Сам этот поток выглядит так (это исходник для фасма, смысл большенства полей мне не ясен, но ключевые проименованы имхо верно)
    Код (Text):
    1.  
    2.   Stream4:
    3.     .000        dd -1
    4.     .004        dw 0,131h
    5.     .008        rb 16
    6.     .018        dd 11Ch,18Ch
    7.     .020        dd 68h
    8.     .24         dd .??-.Start??
    9.     .028        rb 56
    10.     .060        dw 0,0Ch
    11.     .LinesData  dd Lines.Entries?-Lines
    12.     .LinesDataSize  dd Lines.DataSize
    13.     .06C        rd 5
    14.     .080        db '12345678',0,'12345678',0,0,0
    15.     .094        rb 64
    16.     .0D4:       times 58 db ' '
    17.     .10E        rb 66
    18.     .150        db '0123456789',0,0
    19.     .15C        db 2Dh, 0BAh, 2Eh, 0F1h
    20.     .160        rd 7
    21.     .17C        dd 1
    22.     .CodeStart  dd CodeStart
    23.     .CodeSize   dd CodeEnd-CodeStart+1
    24.     .188        rb 44
    25.     .1B4        dd 2
    26.     .1B8        rb 40
    27.     .1E0        dd 2
    28.     .1E4        rb 36
    29.     .208        dd 4
    30.     .20C        rb 228
    31.     .2F0        dw 0,1
    32.     .2F4        dd 0,0
    33.     .2FC        dd 1000h
    34.     .300        rb 80
    35.     .Start??    dw 3,1
    36.     .354        dw 0,0,0
    37.     .35A        dw 1     ; это похоже количество файлов
    38.     .35C        dd 0,0
    39.     .364        db "X:\fill\path\to\source.", 0
    40.     align 4
    41.     .??     dd 0
    42.     .Size = $-Stream4
    43.     align PAGE_SIZE




    А это инфа о строчках и оффсетах на которую ссылается поток выше:
    Код (Text):
    1.  
    2.     Lines:      ;rb 60h
    3.     .Entries?   dw 1,?  ; это тоже похоже на количество объектников
    4.     .EntryOffset    dd .Entry-.Entries?
    5.     .CodeStart? dd CodeStart  ; начальный оффсет опкодов, у меня 0
    6.     .CodeEnd?   dd CodeEnd
    7.                 dd ?
    8.     .Entry      dd 1     ; для первого объектника (у меня он один)
    9.                 dd .Data-.Entries?
    10.     .CodeStart  dd CodeStart
    11.     .CodeEnd    dd CodeEnd
    12.     .FullName   db "X:\fill\path\to\source.", 0
    13.     align 4
    14.     .Data       dw 1
    15.     .NumberOfLines  dw (.Numbers-.Offsets)/4
    16.  
    17.              ; оффсеты на опкоды (от начала секции)
    18.     .Offsets:
    19.               dd 0 ; первая строка
    20.               dd 2 ; вторая строка
    21.               ;.....
    22.  
    23.              ; далее идёт инфа о строчках сорца (по 2 байта)
    24.     .Numbers:  
    25.               dw 1
    26.               dw 2
    27.               ; /\ количество должно соответствовать оффсетам
    28.  
    29.               dd 0
    30.  
    31.     .DataSize = $-.Entries?  ; это сохраняется в 4м потоке (LinesDataSize)
    32.  




    Помню были проблемы из-за того, что кое-что дублируется в разных местах. Остальное уже забыл за полтора года, а до поддержики нескольких исходников так и не дошел. :-(



    Но это все похоже ты и так разобрал уже. Что там за хитрости, с ходу не врублюсь :)

    Добить это дело конечно интересно, только вот со временем сейчас туго :-(



    ЗЫ: кста, сколько я не смотрел pdbdump, так и не понял, где там формат PDB можно узреть :)
     
  10. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Расковыряй DIA SDK и увидишь где.
     
  11. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Спасибо за безценный совет!

    Но, во-первых, DIA SDK - это уже не pdbdump, а во-вторых, (прошу прощения за тупость) что конкретно там ковырять?
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    S_T_A_S_

    DIA SDK - это интерфейсы для доступа к pdb (на чтение). pdbdump - утилита, реализовавшая доступ к pdb через них. Для записи pdb они бесполезны :)



    В исходниках винды есть код для работы с pdb, правда, старых версий. Но может поможет?
     
  13. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    IceStudent

    Вот и я о том же :))



    До кучи ещё одна бесполезная ссылка

    http://ftp.nux.at/pub/cvsroot/winex/programs/winedbg/msc.c



     
  14. StatusError

    StatusError New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    34
    S_T_A_S_

    Все, пришло мне сегодня счастье!!! Исправил поток, теперь в сайсе виден корректно сишный код, да еще до кучи стеековые переменные тоже стали показываться... короче вообще ништяк... Если найду после работы время, хочу собрать воедино все знания, которые получил, пока ковырял формат. Ато обидно получается - щас все помню, а теперь дали другой проект - все забуду, а потом если что опять вспоминай... Накатаю доку как смогу, если не лень - ты покритикуй, если найдешь ошибки, вообще здорово, надо же составить максимально близкое к правде представление про этого пушного зверька...
     
  15. StatusError

    StatusError New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    34
    Кстати, всех хочу предостеречь от использования DIA библиотеки, которая идет с дистрибом седьмой студии. Ребята из фирмы "Маленькие программки" как-то так хитро ее наботали, что после освобождениЯ указателей на интерфейс ( возможно путаюсь в терминологии, т.к. в COM не силен ) память не освобождается. моя прога кушала до 350 мб памяти... Та же композиция, только вид сбоку, но в 8-й студии с новой версией DLL скромно потребляет 10 мб. Вот такие дела...
     
  16. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    StatusError

    Если появится желание обнародовать результаты своих трудов - это просто замечательно. Я конечно же с удовольствием почитаю, вот только найду ли ошибки - хз :)
     
  17. StatusError

    StatusError New Member

    Публикаций:
    0
    Регистрация:
    20 июл 2005
    Сообщения:
    34
    S_T_A_S_

    Желание-то есть, вто только когда я смогу это написать... Щас на работе имею тесные половые отношения с айсом по 12 часов... вчером сил нет... Ну когда-нидь осилю... :)