【发布时间】:2011-05-15 11:36:02
【问题描述】:
#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 以将 SIGTRAP 传递给程序,此处的代码将无法调试 GDB。但是,如果您尝试自己 ptrace,如果您在 GDB 下运行(已经 ptraced),您将不会成功,并且没有办法阻止/隐藏这一点。