Сообщение, отображаемое отладчиком, на самом деле довольно ясно объясняет, почему ba
не будет работать на этом этапе. Инструкция ba
устанавливает аппаратную точку останова. Аппаратные точки останова устанавливаются через регистры отладки . Регистры отладки являются частью контекста процессора, который устанавливается ОС. Вы только что загрузили процесс в память - вся структура памяти готова, но контекст процессора не был установлен. Если вы отладчик устанавливаете некоторые значения реестра прямо сейчас, эти изменения не будут иметь значения, потому что ОС будет переопределять все значения реестра при запуске процесса.
Программная точка останова (bp
) лучше здесь, потому что она работает путем перезаписи инструкции по адресу, указанному вами для INT 3
инструкции. Очевидно, что это не зависит от изменения контекста процессора, так что работает в любое время, даже на начальной точке останова процессора.
Обходной путь прост - сначала выполните один шаг, используя инструкцию t
, затем вы можете использовать аппаратные точки останова, как вам нравится. Для точки останова выполнения я бы рекомендовал использовать программные точки останова. Вы можете создать любое количество программных точек останова, в то время как количество аппаратных точек останова ограничено количеством регистров отладки.