Функция 69, подфункция 9 - установить/снять аппаратную точку останова.
Параметры:
- eax = 69 - номер функции
- ebx = 9 - номер подфункции
- ecx = идентификатор потока
- dl = индекс точки останова, от 0 до 3 включительно
- dh = флаги:
- если старший бит сброшен - установить точку останова:
- биты 0-1 - условие:
- 00 = точка останова на выполнение
- 01 = точка останова на запись
- 11 = точка останова на чтение/запись
- биты 2-3 - длина; для точек останова на исполнение должно быть
00, в противном случае одно из
- 00 = байт
- 01 = слово
- 11 = двойное слово
- esi = адрес точки останова; должен быть выровнен
соответственно длине (т.е. должен быть чётным для
точек останова на слово, кратен 4 для двойного слова)
- если старший бит установлен - сбросить точку останова
Возвращаемое значение:
- eax = 0 - успешно
- eax = 1 - ошибка во входных данных
- eax = 2 - (зарезервировано, никогда не возвращается
в текущей реализации) с этим индексом уже установлена
глобальная точка останова
Замечания:
- Процесс должен быть загружен для отладки (как указано в
общем описании).
- Аппаратные точки останова реализуются через DRx-регистры
процессора, отсюда все ограничения.
- Функция может переустановить ранее установленную ей же
точку останова (никак не сообщая об этом).
Ведите список установленных точек останова в отладчике.
- Срабатывание точки останова заключается в генерировании
отладочного исключения #DB, о котором система сообщает отладчику.
- Точка останова на запись и чтение/запись срабатывает после
выполнения вызвавшей её инструкции.