Модификация kernel32.dll в памяти моего процесса

Тема в разделе "WASM.WIN32", создана пользователем NullSessi0n, 14 май 2006.

Статус темы:
Закрыта.
  1. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Если я перезапишу в своём процессе несколько байт в kernel32.dll, изменения на другие процессы не должны распространиться. Но после этого каждый процесс получит свою копию, или мне просто выделят отледьную, а остальные будут совместно использовать оригинал?
     
  2. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Немного непонятно написанное, но вот как по идее все работает:

    Создается процесс, в его адресное простанство грузится ntdll.dll и kernel32.dll с диска. То есть у каждого процесса есть своя копия. Ты меняешь байты только у себя в адр. простр., а у других процессов остается оригинал библиотеки. То есть, чтобы сделать перехват функции, тебе нужно поменять байты во всех процессах.
     
  3. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Я только внутри себя хочу сделать перехват. Просто начитался тут PAGE_WRITECOPY - до первого изменения процессы разделяют одну проекцию файла, а после - каждый получает свою копию (механизм введён в NT). Вот неужели всё так ужасно - тогда после изменения я заберу [размер образа kernel32.dll]*([число процессов]-1) памяти?

    Но если эти dll сразу для каждого свои грузятся, как ты написал, то терять нечего.

    Да... надо подумать.
     
  4. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Лично я не вижу смысла загружать ntdll.dll и kernel32.dll в каждый процесс, можно было бы ОС выделить место в памяти для всех dll (естественно его размер бы динамически менялся), да и грузить их туда, чтобы 100 копий одно библиотеки не было. Тогда перехваты делать было бы просто загляденье - поправил одну библиотеку - и все :)
     
  5. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    именно так. Только ты получишь не полную копию, а копию только той страницы (страниц) в которых сделал изменения. Т.е. модифицированные страницы будут я ту свои а остальные будут продолжать разделятся между всеми.
     
  6. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    infern0

    Спасибо. Это просто замечательно!
     
Статус темы:
Закрыта.