PEB что фиксить?

Тема в разделе "WASM.BEGINNERS", создана пользователем mrcrown, 2 фев 2008.

  1. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Всем доброго времени суток!
    Вот такой вопрос, что нужно профиксить в ПЕБ, что бы нормально работал, загруженый через собственный лоадер, бинарник?
    Или хоть, если есть, дайте описание ПЕБ!? Структуру знаю а что там за что отвечает нипайму!
    Спасибо!
     
  2. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Может много чего надо фиксить, ты напиши что там не работает у тебя.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    гугл точно не для тебя придумали
    http://google.ru/search?q=typedef+struct+_PEB+%7B

    хотя бы ImageBase

    PVOID ImageBaseAddress; /* 08h */
     
  4. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Cock
    Не работают например стили, то есть прога грузится без ХП стилей, как в Вин9х! И еще такая проблема, не знаю это в пеб или нет, но не грузятся многие проги которые юзают ВЦЛ, то есть прога написаная на чистом АПИ грузится на ура! И виндовые проги типа калькулятора и прочей шушары. А вот например любая запакованая сразу сдыхает!
    Great
    Ну имейджбейс я фиксил! первым делом :)
    И потом пролистал первые результаты гугла, там только описание структуры, безо всякого пописание ее полей, а именно за что они отвечают!
     
  5. agent007

    agent007 New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2007
    Сообщения:
    166
    ну так нет манифеста - нет стилей
     
  6. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    mrcrown
    ВЦЛ это VCL из Delphi?
    Скорее всего, проблема с ресурсами.
     
  7. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Так ясен пень, что проблема с чем-то! Рас не работает! Я же и прошу ОПИСАНИЕ СТРУКТУРЫ PEB ну если есть то и TEB! (под описанием я имею ввиду не саму структуру, а описание полей этой структуры!)
     
  8. EvilPhreak

    EvilPhreak New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    154
    mrcrown
    Часть полей можно понять по смыслу, маленькую часть есть во "Внутреннее устройство Windows", часть в Шрайбере, немного тут
    http://undocumented.ntinternals.net/UserMode/Undocumented Functions/NT Objects/Process/PEB.html, совсем малость в Неббете.
    Много(!) о смысле полей можно найти в исходниках ReactOS (хотя у меня явно они не последней версии - сейчас качаю последнюю). Ну к примеру о поле Ldr можно узнать из функции ListUserModules в symbols.c. Delphi проги, которые юзают VCL имеют TLS - информация о статических TLS переменных хранится в PEB - как именно это поле используется загрузчиком можно прочитать в функции LdrpInitializeTlsForProccess из файла '\dll\ntdll\ldr\utils.c' исходников ReactOS. Также чуть о TlsBitmapBits, TlsExpansionBitmapBits, TlsSlots и о TlsExpansionSlots есть тут - http://www.wasm.ru/article.php?article=tls. Поле KernelCallbackTable в теории не должно использоваться, но заполненно валидным адресом. Вот как оно юзается
    VOID
    NTAPI
    Код (Text):
    1. KiUserCallbackDispatcher(ULONG Index,
    2.                          PVOID Argument,
    3.                          ULONG ArgumentLength)
    4. {
    5.     /* Return with the result of the callback function */
    6.     ZwCallbackReturn(NULL,
    7.                      0,
    8.                      ((USER_CALL)(NtCurrentPeb()->KernelCallbackTable[Index]))
    9.                      (Argument, ArgumentLength));
    10. }
    Интересное поле, которое требует отдельных экспериментов по совместимости - PostProcessInitRoutine, немножко описывается Micro$oft'ом тут - http://msdn2.microsoft.com/en-us/library/aa813706(VS.85).aspx.
    Вполне очевидно, что куча инфы находится в самих исходниках Windows, но к сожалению их под рукой сейчас у меня нет (т.к. сижу в подвале и с низу капает вода). Распарсить диманичный PEB в удобном виде поможет windbg - так dt -r3 ntdll!_peb 7ffde000 (-r3 - глубина рекурсии структур). Тут - http://pasotech.altervista.org/delphi/PEB.htm о различиях PEB в разных ОС.
     
  9. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Спасибо!
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    o_0 с низу и капает? сюрр какой-то.
     
  11. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Ежели дело касается гуя (который не так работает) - посмотри отличия при вызове CsrClientCallServer, а вернее сообщение передаваемое туда (там в том числе ActivationContext - winsxs и иже с ними, имхо оттуда ноги растут у проблемы, т.к. варианты описанные для 2к в ХР не работают - даже если ты создаешь процесс из ядра и имеешь корректный хендл порта csrss - передаешь туда стандартное для 2к LPC message - а толку ноль, возвращается ошибка, т.к. формат сообщения другой - в ХР используется winsxs структуры)
    Другими словами, дело не в PEB имхо
     
  12. justru

    justru New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    39
    У меня в одной гуевой программе даже MessageBox не пахает, хотя notepad сейчас уже грузится по полной, со стилями... копал весь мессажбокс, там похожу объект шрифта как не так выбирается =\\\ копаю дальше =\\\

    p.s. эта вся хрень у меня в прогах на MFC пока выявляется (c TLS не забирался пока даже ещё)
     
  13. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Имхо дело в неверном заполнении PEB_LDR_DATA, а точнее списков внутри (In[...]OrderModuleList).
     
  14. justru

    justru New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2008
    Сообщения:
    39
    После того как я поменял старое вхождение (от загрузчика) InInitializationOrderModuleList на новое у меня нацепились стандартные стили, и более правильно стал работать гуй. Но всё равно падает =\\\
    Код (Text):
    1.     pLDR->BaseAddress = (PVOID)Mapping;
    2.     pLDR->EntryPoint = (LPVOID)( (DWORD)Mapping + poh->AddressOfEntryPoint );
    3.     pLDR->LoadCount = 1;
    4.     pLDR->SizeOfImage = poh->SizeOfImage;
    5.     pLDR->BaseDllName = wName;
    6.     pLDR->FullDllName = wName;
    Может какие-то ещё поля надо?
    Поля брал из ReactOS, там ещё есть пару полей, но у меня в структуре _LDR_MODULE их нет :dntknw:
     
  15. Drag0N

    Drag0N New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2008
    Сообщения:
    19
    justru, а что надо фиксить в PEB, чтобы нацепились стандартные стили? А то у меня похожая проблема... стили не работают... совсем...
     
  16. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Проблема похожая. Некоторые загруженные из памяти бинарники падают в gdi32 (ReleaseDC, DeleteObject и т.д.). Что нужно фиксить дополнительно?

    EP, ImageBase в PEB и в LDR_DATA_TABLE_ENTRY для основного модуля правлю, но проблема та же. Дамп самого модуля полностью идентичен с загруженным системой, т.е. остается что-то в системных структурах.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    deLight
    Где исключение возникает ?
     
  18. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    сейчас в данном случае: gdi32.GetDIBits 0x77f19fc7

    winxpsp3, версия gdi32.dll - 5.1.2600.5512
     
  19. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ты ресурсы сохранил, как я сказал? точно не в этом проблема?
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    deLight
    Приведи часть кода где возникает исключение.