10
#include <stdio.h>
#include <signal.h>
static volatile sig_atomic_t being_debugged = 1;
static void int3_handler(int signo) { being_debugged = 0; }
int main()
{
signal(SIGTRAP, int3_handler);
__asm__ __volatile__("int3");
if (being_debugged) {
puts("No, I don't want to serve you.");
while (1) {
/* endless loop */ ;
}
}
puts("Yes, real routines go here.");
return 0;
}
以上将在gdb内部/外部运行时给出不同的输出,因为gdb捕获sigtrap信号。如何使用信号调试程序?
如何使我的程序的行为在gdb一样吗?当劣接收到任何信号
你可能也在看ptrace sigcall。这里的代码将无法调试GDB,如果有人设置其gdb将sigtrap传递给程序。但是,如果你试图自己追踪,如果你在GDB下运行(已经被追踪),你将不会成功,并且无法防止/隐藏它。 – xryl669 2013-04-29 08:17:05