是否有可能软件破坏GDB中的Native Client应用程序并继续执行?

时间:2012-02-02 09:22:18

标签: gdb google-nativeclient

是否有人有使用{Native}的调解程序如here所述调试Native Client应用程序的经验?

我正在尝试在应用程序代码中触发软件断点或异常,该代码将在其触发的源代码行中暂停附加并运行的GDB,并能够继续执行。

我可以通过创建非法地址异常来做到这一点,例如:

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

确实进入了使用define的调试器:

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

但是我似乎无法使用 jump 命令继续执行以跳过中断线(使用下一个源代码行或汇编代码地址)。在继续之前,我是否需要确认或清除分段错误?

有没有人知道是否有可能继续使用非法地址例外进行​​exectuion?或者是否有可以使用的不同方法,例如,引发软件异常,(EXC_SOFTWARE)? 任何帮助或建议将不胜感激。

(顺便说一句,这是我的第一篇关于堆叠溢出的帖子,所以如果我没有遵循这篇文章的任何礼节而道歉。)

非常感谢,

安迪

2 个答案:

答案 0 :(得分:1)

我通常使用无限循环来达到同样的目的。

volatile int var = 1;
while (var);

然后我在调试器中更改相应的寄存器值。

set $rax = 0

答案 1 :(得分:0)

您可以将__asm__("int3");与winGDB一起使用,详见here

~Main