Перехват доступа к памяти.

Тема в разделе "WASM.NT.KERNEL", создана пользователем koshman86, 3 апр 2009.

  1. koshman86

    koshman86 New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2009
    Сообщения:
    3
    Здраствуйте! Если я поставлю точку остановки на дискриптор страницы памяти и при этом попробую что-то считать/записать по реальному физическому адресу (адрес IDT), который входит в данную страницу, сработает ли ловушка если я буду обращаться к память не по логическому адресу а по реальном?
     
  2. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Как это?
    Как это?
     
  3. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Вопрос возможно в том, что сработает ли точка останова при обращении к физ. памяти, адресуемой линейным адресом, на который была поставлена точка останова по другому линейному адресу? Ответ нет
     
  4. koshman86

    koshman86 New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2009
    Сообщения:
    3
    1. Я в каталоге страниц найду страницу в которой находит нужный мне адрес и на запись на эту страницу посталю точку остановки по доступу к памяти с помощью одного из отладочного регистра.
    2. Потом достаю адрес IDT из регистра idtк ( в нем сохраняется линейный адрес ) и используя смещение читаю или записываю в память.

    Вопрос: сработает ли ловушка по доступу к данной странице памяти где находится IDT?

    Я возможно я не точно высказываюсь, я только начинаю открывать для себя PM, так что извините, если что-то не так.
     
  5. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Смысл в том что вы ставите breakpoint на запись в таблице страниц и ожидаете что при трансляции линейного адреса в физический процессор прочитает эту запись и вызовет отладочное исключение? Вы ведь будете ставить точку останова на линейный адрес, а процессор будет работать с физическим (который берется из CR3), поэтому он даже чисто теоретически не обратит внимания на вашу точку останова.

    А вообще, он и по логике не должен этого делать. Я никогда не задавался этим вопросом, но можете проверить например сработает ли точка останова на чтение инструкции, которую вы выполните - наверняка ведь нет, потому что инструкция это код, а не данные. А точки останова эти предназначены для данных.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Думаю если произойдёт аппаратный останов на странице с IDT(в Dr линейный адрес) возникнет #DF и процессор повиснет. Если по физическому адресу обращаться останов не произойдёт. Хотя нужно смотреть в манах как исполняет процессор обращение к IDT, если Dr7 сбрасывается до обращения, то исключение будет обработано, иначе если Dr7 сбрасывается после обращения к странице, то будет сгенерировано не обрабатываемое исключение двойной ошибки.
     
  7. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Clerk
    как-то мудрено шибко.

    Кем он и куда сбрасывается?

    Вообще, кто занимался на практике, есть какие-нибудь сведения что процессор сгенерирует int1 для точки останова по чтению данных, кроме как в том случае если когда происходит считывание операнда команды? Что-то сумлеваюсь
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    SashaTalakin
    Ну он должен сбрасываться если два раза #DB сгенерируется.. хотя хз, в любом случае процессор зависнет, либо войдя в #DF, либо крутиться будет исполняя останов, что врятле.
    Сам то хоть понял что сказал ??
     
  9. qman

    qman New Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    14
    Я что будет если IDT поместить на страницу которая находится в файле подкачки? В idtr уже не будет содержаться физический адрес IDT, поскольку IDT будет поза межой доступной физической памяти.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    qman
    Если процессор не может извлечь дескриптор, или тп., он останавливается. Без разницы, испортить TSS, IDT похерить..
     
  11. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Ну у любой нормальной команды есть операнды, может быть они неявно адресованы, но подразумеваются. Вопрос в том, может ли быть сгенерирована точка останова на чтение/запись памяти в каком-то ином случае, кроме как в случае с доступом к операнду команды. Тобиж например при извлечении инструкции из памяти происходит чтение по cs:ip. Будет ли например в этом случае сигнализация точки останова, установленой на этот линейный адрес? Мне кажется что врядли.

    Интересно а что будет если в пользовательской программе через seh например поставить точку останова исполнения на первую или вторую инструкцию обработчика int1 и на инструкцию в собственном коде (чтобы передать управление на иnt1).
     
  12. koshman86

    koshman86 New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2009
    Сообщения:
    3
    Для того, чтобы процессор не завис можно оставить часть IDT из int1 вне заданной стрaницы.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    В цикле вызов диспетчера исключений, затем переполнение стека. Далее регистр Esp адресует страницу не доступную для записи, ядро копирует стековый фрейм туда, возникает исключение, его ловит сех-фрейм и ядро тихо завершает процесс, это всё происходит в KiDispatchException().
     
  14. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Не будет работать ваша точка останова на страницу вообще. См. пост #5. Устанавливая bp на чтение в таблице страниц, вы пользуетесь неявно все тем же механизмом страничной адрессации. Процессор же, работая с этой записью, этот механизм осуществляет. Пользуется при этом он физической адрессацией
     
  15. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    логично
     
  16. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Только в цикле не вызов диспетчера будет видимо, а вызов int1. А диспечер исключений подключится уже в момент переполнения
     
  17. Clerk

    Clerk Забанен

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

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Clerk, э. еще разок вот это читаем:
    Где здесь передача исключения в юзермод? Ну кроме установки dr-ов. И да, извиниться не забываем за кашу в голове
     
  19. Clerk

    Clerk Забанен

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

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    Clerk, стек будет переполняться ядерный это неочевидно вам? М.б. каша у кого-то другого в голове?