Программный брейкпоинт

Тема в разделе "WASM.BEGINNERS", создана пользователем inviZ, 20 фев 2009.

  1. inviZ

    inviZ Сергей

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    92
    Адрес:
    Хабаровск
    Бгг, вот ведь никогда не задумывался над одним вопросом. Допустим, отладчик ставит брейкпойнт - затертый байт сохраняет, вставляет 0xCC вместо него.
    Потом, когда отлавливаем соответствующее исключение - старый байт восстанавливаем, поправляем контекст, запускаем поток заново - но ведь брейкпоинт-то надо вернуть обратно ).
    Первое, что приходит в голову - поставить флаг трассировки, поймать уже это трассировочное исключение, и при его обработке вернуть бряк обратно). Или это как-то по-другому делается?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    inviZ
    Да, точно так и делаетсо, вот именно поэтому бряк на подобный код:
    Код (Text):
    1.     Int 0x2A
    2.     pushfd
    Будет обнаружен по сохранённому флажку TF, аналогично как и трассировка.
    Альтернатива - любая однобайтная привилегированная инструкция(если в юзермоде).