Возможно ли программное обеспечение сломать приложение Native Client в GDB и продолжить выполнение? - PullRequest
1 голос
/ 02 февраля 2012

Есть ли у кого-нибудь опыт использования отладчика собственного клиента Windows, как описано здесь для отладки приложения собственного клиента?

Я пытаюсь запустить программную точку останова или исключение вкод приложения, который остановит подключенную и запущенную GDB в исходной строке, из которой он был запущен, и сможет продолжить выполнение.

Я могу сделать это, создав исключение недопустимого адреса, например:

#define SOFTBREAK { int *p=0; p=0; }

, который врывается в отладчик, где бы ни использовалось определение:

Program received signal SIGSEGV, Segmentation fault.
0x0000000c00209ba2 in CTestTestList::Init (this=0xfe55d080) at ../testlist.cpp:1242
1242    in ../testlist.cpp

однако я не могу продолжить выполнение, используя команду jump для пропуска строки разрыва,(либо используя следующую исходную строку или адрес сборки).Нужно ли мне подтверждать или устранять ошибку сегментации, прежде чем продолжить?

Кто-нибудь знает, возможно ли продолжить выполнение, используя исключение незаконного адреса?Или есть другой метод, который можно использовать, например, вызвать программную исключительную ситуацию (EXC_SOFTWARE)?Буду признателен за любую помощь или совет.

(Кстати, это мой первый пост с переполнением стека, поэтому прошу прощения, если я не следовал ни одному этикету с этим постом.)

Большое спасибо,

Энди

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Я обычно использую бесконечный цикл для той же цели.

volatile int var = 1;
while (var);

Затем я изменяю соответствующее значение регистра в отладчике.

set $rax = 0
0 голосов
/ 03 февраля 2012

Вы можете использовать __asm__("int3"); с winGDB, как подробно здесь

~ Главная

...