ДЛЛ + расшаренная секция + особый процесс. Промогите решить проблему

Тема в разделе "WASM.WIN32", создана пользователем int2e, 9 янв 2009.

  1. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    В ДЛЛ дата-секция расшарена (shareable)
    Эта длл загружена во все процессы
    Есть особый процесс, в котором нужно изменить несколько двордов в дата-секции либы, при чем так, чтобы эти дворды не изменились во всех остальных процессах.

    Как проще реализовать?

    У меня идея выгрузить эту длл из нужного процесса, загрузить пропатченную копию (без shareable-флага) и в таймере синхронизировать содержимое секции, за исключением нужных двордов. Правда для этого прийдется внедряться еще в один процесс, чтобы узнать содержимое оригинальной дата-секции...

    В общим, подскажите, как сделать проще.
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Создай еще одну дата секцию, не shareable.
     
  3. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    нннет. Библиотека не моя. Мой - шел код (чит) для определенного процесса
     
  4. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Ну может изметить (VirtualProtectEx) memory-protection options на PAGE_WRITECOPY
     
  5. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    Нет, ты не понял...

    Смотри...
    Есть либа. В ней секция .data с флагом shareable
    Либа всегда загружена в несколько процессов (а то и во все, кроме системных)

    Есть мой шелкод, который загружается в определенный процесс.
    Шелкод должен изменить кусок памяти в либе в data-секции так, чтобы этот кусок памяти не изменился во всех остальных копиях либы в других процессах.

    VirtualProtect(Ex) тут не поможет.
     
  6. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Почему не поможет ? Ты изменяешь параметры регигона памяти в твоем процессе. После этого любая запись в этот регион вызовет copy-on-write механизм и твой процесс получит приватную копию куска памяти.
     
  7. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    Partner
    а это идея....
    огромное спасибо!
    Буду пробовать =)
     
  8. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Один также может рассмотреть вариант с установкой хардварных точек слома на чтение интересующих данных в нужном процессе и добавление векторного обработчика исключений, который будет перехватывать обращения к двордам и подсовывать нужные данные. Это избавляет от необходимости синхронизации страниц памяти, но накладывает некоторые ограничения и, кроме того, имеет сложности в реализации.
     
  9. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Кто такой один ?
    Что такое точки слома ?
     
  10. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    впринципе можно и самому реализовать такой механизм...
    руками выделить память под данные, а адрес такого блока памяти для каждого
    АП процесса где он существует держать в shared'e ... например в виде PID / ADDR.
    но только вот зачем? с copy-on-write все должно получится.

    > Кто такой один ?
    > Что такое точки слома ?

    люди, погубленные Prompt'ом %))
     
  11. a1tus

    a1tus New Member

    Публикаций:
    0
    Регистрация:
    5 янв 2009
    Сообщения:
    22
    >> Что такое точки слома ?

    breakpoints )))))