Перерыв LLDB по адресу
Я извиняюсь за вероятный тривиальный вопрос, но я натыкаюсь на стену, поскольку Google дает мне те же неприменимые ответы снова и снова.
Я пытаюсь установить точку останова в LLDB. После прочтения документации доступные мне варианты - либо остановиться на определенной строке в источнике, либо на определенном символе.
То, что я хочу сделать, - установить точку останова в определенном месте памяти.
Не записывать или записывать в эту ячейку памяти, но просто ломаться, когда команда в этом месте должна быть выполнена.
В псевдокоде:
break 0x00010000
ломается, когда EIP указывает на 0x00010000.
Как я могу это сделать?
Ответы
Ответ 1
breakpoint set
имеет адресную опцию; вы должны набрать help breakpoint set
, чтобы увидеть все. Для вашего конкретного примера
(lldb) br s -a 0x10000
(Вы всегда можете использовать более короткие версии имен команд в lldb, которые недвусмысленны, поэтому ввод текста breakpoint set
не требуется)
Ответ 2
Альтернативой является использование "запуска процесса - остановка на входе...". Это позволит вам установить точки останова после запуска программы, а затем "продолжить" позволит вам остановиться на первой точке останова. Интересно (тестирование в Ubuntu) с использованием --stop-at-entry занимает намного больше времени (~ 3 секунды). Мне нужно использовать это на OS X, и, возможно, это будет быстрее.