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