В ДЛЛ дата-секция расшарена (shareable) Эта длл загружена во все процессы Есть особый процесс, в котором нужно изменить несколько двордов в дата-секции либы, при чем так, чтобы эти дворды не изменились во всех остальных процессах. Как проще реализовать? У меня идея выгрузить эту длл из нужного процесса, загрузить пропатченную копию (без shareable-флага) и в таймере синхронизировать содержимое секции, за исключением нужных двордов. Правда для этого прийдется внедряться еще в один процесс, чтобы узнать содержимое оригинальной дата-секции... В общим, подскажите, как сделать проще.
Нет, ты не понял... Смотри... Есть либа. В ней секция .data с флагом shareable Либа всегда загружена в несколько процессов (а то и во все, кроме системных) Есть мой шелкод, который загружается в определенный процесс. Шелкод должен изменить кусок памяти в либе в data-секции так, чтобы этот кусок памяти не изменился во всех остальных копиях либы в других процессах. VirtualProtect(Ex) тут не поможет.
Почему не поможет ? Ты изменяешь параметры регигона памяти в твоем процессе. После этого любая запись в этот регион вызовет copy-on-write механизм и твой процесс получит приватную копию куска памяти.
Один также может рассмотреть вариант с установкой хардварных точек слома на чтение интересующих данных в нужном процессе и добавление векторного обработчика исключений, который будет перехватывать обращения к двордам и подсовывать нужные данные. Это избавляет от необходимости синхронизации страниц памяти, но накладывает некоторые ограничения и, кроме того, имеет сложности в реализации.
впринципе можно и самому реализовать такой механизм... руками выделить память под данные, а адрес такого блока памяти для каждого АП процесса где он существует держать в shared'e ... например в виде PID / ADDR. но только вот зачем? с copy-on-write все должно получится. > Кто такой один ? > Что такое точки слома ? люди, погубленные Prompt'ом %))