Shareable-секции. Объясните механизм

Тема в разделе "WASM.WIN32", создана пользователем Magnum, 24 сен 2008.

  1. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    САБЖ
    Кто знает - объясните действия загрузчика при обработке подобных секций
    Интересует именно что происходит в нулевом кольце

    Если есть куски кода - вообще замечательно


    ЗЫ: сейчас качаю сорсы реакт-ос. Насколько вынь-загрузчик отличается от реакт_ОС-овского?
     
  2. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    хз чо там происходит. По логике общая физическая память мапится в контексты идентичных процессов. Далее они с ней и работают, и соответственно всё друг у друга видят. Вообще у Рихтера кое-какое описалово есть по этому моменту.
     
  3. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    У Руcсиновича в Windows Internals.
     
  4. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Вопрос возник не с проста. Ситуация у меня несколько интереснее...

    Есть две библиотеки

    procedures.dll и hooks.dll
    У обоих ImageBase == 0x1000000

    Секция .data в библиотеке hooks.dll с аттрибутом shareable
    hooks.dll загружается после procedures.dll (точнее, hooks.dll подругжается самой procedures.dll)

    А вот дальше интересно... .
    hooks.dll статически импортирует функции из procedures.dll
    У обоих библотек IAT находится в секции .data!
    Обе либы подгружаются во все процессы.
    Финт в том, что действительные базы образов (покоторым загружены либы) - в каждом процессе отличаются, как вывод - в библиотеке хукс отличается ИАТ. А т.к. ИАТ находится в шарабельной секции, то, как я полагал, должен произойти тотальный обвал.
    Но
    Все работает.
    Глобальные переменные действительно видны.
    А вот импорт свой у каждой копии. Даже в шарабельной секции.


    Поэтому заинтересовало, как оно там происходит...
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Происходит просто - физическая память, занимаемая такой секцией, мапится во все процессы загрузившие эту длл. В отличии от секции данных, которая у каждого процесса своя (мапится в разные области физической памяти)