@QuestInfo

Существует ли отладчик, который позволяет делать брекпоинт с условиями?

Есть чужая программа, которая запущена и работает на операционной системе windows. Я хочу произвести отладку и остановить программу когда будет соблюдаться определенное условие. Допустим сумма регистров eax+ebx будет равна 65463. Есть ли какой нибудь отладчик который позволяет контролировать отладку программно?
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Я хочу произвести отладку и остановить программу когда будет соблюдаться определенное условие. Допустим сумма регистров eax+ebx будет равна 65463.

Для совсем уж произвольного условия, типа того, что вы написали, готовых средств скорее всего нет.
Если вам нужно остановиться, когда программная переменная в памяти принимает определённое значение -- искать в вашем отладчике по слову watchpoint. В gdb, например, можно поставить watchpoint на переменную, а в commands вписать код, который будет продолжать выполнение, если значение переменной не то, что вам нужно, например:
$ cat > main.c
int v;

static void f(int *p)
{
        int i;

        for (i = 0; i < 20; ++i)
                *p = (i - 10) * (i - 10);
}

int main()
{
        f(&v);
        return 0;
}
$ gcc -g2 -o watch main.c     
$ gdb ./watch              
...
Reading symbols from ./watch...done.
(gdb) start
Temporary breakpoint 1 at 0x4004ec: file main.c, line 13.
Starting program: /home/jcmvbkbc/tmp/toster/watch/watch 

Temporary breakpoint 1, main () at main.c:13
13              f(&v);
(gdb) watch v
Hardware watchpoint 2: v
(gdb) commands 
Type commands for breakpoint(s) 2, one per line.
End with a line saying just "end".
>if (v != 4)
 >continue
 >end
>end
(gdb) c
Continuing.
...
Hardware watchpoint 2: v

Old value = 9
New value = 4
f (p=0x600904 <v>) at main.c:7
7               for (i = 0; i < 20; ++i)
(gdb)
Ответ написан
Комментировать
mage
@mage
Это называется conditional breakpoints. Многие отладчики умеют.
Windbg: https://msdn.microsoft.com/en-us/library/windows/h...
Visual Studio: https://msdn.microsoft.com/en-us/library/7sye83ce(...
Ответ написан
@Veliant
В OllyDbg 2.* в режиме трейсинга можно такое сделать. Trace->Set condition и в поле Condition rule # как раз написать eax+ebx=65463. После этого жмем Ctrl+F11 (Trace into) и долго ждем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы